У меня есть следующий код:Java 2 функции с суперкласса и подклассов подписей - выбирает суперкласс, несмотря на тип этого подкласса является подклассом
public class Main {
public boolean equals(String other){
return other == new Object();
}
public boolean equals(Object other){
return other == new Object();
}
public static void main(String[] args){
String s = "";
Object b1 = new Main();
System.out.println(b1.equals(s));
}
}
Насколько я знаю, выбор equals
метод должен работать следующим образом: Во время время компиляции подпись будет выбрана, и так как s
имеет типа времени компиляции (например, type
), метод с параметром String
должен быть выбран, и поскольку b1
является экземпляром Main
тогда мы войдем нашу Main
реализации equals
, а не Object
.
Однако при отладке я вижу, что я ввожу реализацию Main
с параметром типа Object
.
Я видел эти 2 статьи:
Overloaded method selection based on the parameter's real type - не объясняющие мое дело, но случай, в котором тип s
был бы объект.
https://stackoverflow.com/a/8356435/4345843 - этот ответ, если это правда, насколько я понимаю, поддерживает мою теорию.
Буду рад за пояснения.