Gemäß der Regel können Parameter beim Überschreiben einer Methode in der Unterklasse nicht geändert werden und müssen mit denen in der Superklasse identisch sein. Was passiert, wenn wir die Unterklasse des Parameters beim Überschreiben der Methode übergeben? Wird es als Überladen oder Überschreiben bezeichnet?Können wir in Java eine Methode überschreiben, indem wir die Unterklasse des in der Superklassenmethode verwendeten Parameters übergeben?
Basierend auf meiner Abfrage habe ich einen Code unten geschrieben.
Ich erwartete die Ausgabe als "Hund isst Fleisch Essen", aber zu meiner Überraschung ist die Ausgabe "Tier ißt Fleisch Essen" Will schätzen, wenn jemand erklären kann, wie Animal-Methode aufgerufen wird, wenn das zugewiesene Objekt vom Typ Hund ist?
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);
}
}
Sie den Code bereits geschrieben haben - probieren Sie es und finden Sie heraus, was der Compiler sagt. – childofsoong
siehe "Besuchermuster" – ZhongYu
Der Compiler beschwert sich nichts. Eigentlich läuft das Programm, deshalb kann ich die Ausgabe sehen, aber es ist komisch. Wenn ich die Methode explizit als @Override annotieren, beschwert sich der Compiler, dh er überschreibt nicht. Sie werden auch überrascht sein. Kopieren Sie einfach den Code in Ihre Eclipse, erraten Sie die Ausgabe und führen Sie dann die tatsächliche Ausgabe aus und überprüfen Sie sie. –