Учитывая следующий код:
class Kitten {
private String name = "";
public Kitten(String name) {
name = name;
}
public String toString() {
return "Kitten: " + name;
}
public boolean equals(Object other) {
if (this == other) return true;
if (null == other) return false;
if (!(other instanceof Kitten)) return false;
Kitten that = (Kitten) other;
return this.name.equals(that.name);
}
}
//Assume that the Following lines have already been executed
Object maggie = new Kitten("Maggie");
Object fiona = new Kitten("Fiona");
Object fiona2 = new Kitten("Fiona");
Видимо , когда вы запустите строки кода:
> System.out.println(maggie.toString());
>
> System.out.println(fiona.equals(fiona2));
>
> System.out.println(fiona.equals(maggie));
>
Терминал выведет следующее:
>Kitten:
>
>true
>
>true
ПОЧЕМУ использует ли метод toString переопределенный метод класса Kitten, но почему-то не использует значение имени, хранящееся в magg ie?
Также как это Возможно ли, что fiona.equals (magg ie) верен?
Если есть ресурс, который я могу использовать, чтобы прочитать и научиться тонкостям полиморфизма для дальнейшего использования, я был бы признателен за это.