Come per la regola, ignorando un metodo nella sottoclasse, i parametri non possono essere modificati e devono essere uguali a quelli della super classe. Cosa succede se passiamo sottoclasse di parametri durante l'override del metodo? Sarà chiamato sovraccarico o override?In java, è possibile sovrascrivere un metodo passando la sottoclasse del parametro utilizzato nel metodo super-classe?
Sulla base della mia richiesta ho scritto del codice qui sotto.
Mi aspettavo che l'uscita fosse "Cane mangia carne" ma con mia sorpresa l'uscita è "Animali mangia carne" Apprezzerà se qualcuno può spiegare come viene chiamato il metodo Animal quando l'oggetto assegnato è di tipo Cane?
class Food {
public String toString(){
return "Normal Food";
}
}
class Flesh extends Food {
public String toString(){
return "Flesh Food";
}
}
class Animal {
public void eat(Food food){
System.out.println("Animal eats "+ food);
}
}
class Dog extends Animal{
public void eat(Flesh flesh){
System.out.println("Dog eats "+ flesh);
}
}
public class MyUtil {
public static void main(String[] args) {
Animal animal = new Dog();
Flesh flesh = new Flesh();
animal.eat(flesh);
}
}
Hai già scritto il codice - provare e scoprire che cosa dice il compilatore. – childofsoong
vedere "modello visitatore" – ZhongYu
Il compilatore non si lamenta di nulla. In realtà il programma viene eseguito è per questo che sono in grado di vedere l'output ma è strano. Se annoto esplicitamente il metodo come @Override, il compilatore si lamenta, ciò significa che non è prioritario. Anche tu sarai sorpreso. Basta copiare il codice in eclissi, indovinare l'output e quindi eseguire e verificare l'output effettivo. –