Вчера я задал знакомый вопрос, но возникла еще одна проблема.Полиморфизм - Неоднозначная ошибка
class Cat {
public void isClawedBy(Cat c, Kitten k){
System.out.println("Clawed by a cat");
}
}
class Kitten extends Cat{
public void isClawedBy(Kitten k, Cat c){
System.out.println("Clawed by a Kit");
}
}
Cat g = new Cat();
Cat s = new Kitten();
Kitten t = new Kitten();
g.isClawedBy(s,t);
s.isClawedBy(t,s);
t.isClawedBy(t,t);
Вопрос: Меня путают около t.isClawedBy(t,t);
. Я понимаю, что s.isClawedBy(t,s);
выдает ошибку, потому что s имеет статический тип cat.
Но t.isClawedBy(t,t);
выбрасывает «Метод isClawedBy (Kitten, Cat) неоднозначен для ошибки типа Kitten». Если я меняю код на t.isClawedBy(s,t);
или t.isClawedBy(t,s);
, он работает, но не уверен, почему он не работает для (t, t).
Заранее спасибо
Мне нравится, как вы хотите понять, пытаясь с множеством комбинаций :) – nachokk
Другие уже объяснили. Только один совет - подумайте об использовании аннотации @Override, чтобы сообщить компилятору о ваших намерениях. Вы не будете удивлены, и компилятор скажет вам, что вы не переопределяете какой-либо метод. – wjtk