Я построил 2 класса, которые реализуют один и тот же интерфейс и делают разные логи c в зависимости от типа экземпляра. Некоторые из методов получают тип интерфейса в качестве параметра и выполняют различную логику c в зависимости от типа экземпляра. Это было бы легко сделать с помощью instanceof, но мне нужно сделать это без какого-либо запаха.
Вот код, который я пробовал:
public class Concrete1 implements Interf{
public boolean isMatch(Concrete1 s) {return true;}
@Override
public boolean isMatch(Interf s) {return false;}
}
public class Concrete2 implements Interf{
public boolean isMatch(Concrete2 s) {return true;}
@Override
public boolean isMatch(Interf s) {return false;}
}
public static void main(String[] args) {
Concrete1 c1=new Concrete1();
Concrete2 c1=new Concrete2();
Interf i1=new Concrete1();
Interf i2=new Concrete2();
System.out.println(c1.isMatch(c1));
System.out.println(c1.isMatch(c2));
System.out.println(i1.isMatch(i1));
System.out.println(i1.isMatch(i2));
}
Ожидаемый результат будет:
true
false
true
false
Вместо этого я получаю:
true
false
false
false