Ich bin verwirrt darüber, wie sich das Überschreiben vom Verstecken in Java unterscheidet. Kann jemand mehr Details darüber geben, wie sich diese unterscheiden? Ich habe das Java-Tutorial gelesen, aber der Beispielcode hat mich immer noch verwirrt.
Um es klarer zu machen, verstehe ich das Überschreiben gut. Mein Problem ist, dass ich nicht sehe, wie sich das Verstecken unterscheidet, außer dass sich eines auf Instanzebene befindet, während sich das andere auf Klassenebene befindet.
Betrachten Sie den Java-Tutorial-Code:
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
Dann haben wir eine Unterklasse Cat
:
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class method" + " in Cat.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
Dann sagen sie:
Die Ausgabe dieses Programms lautet wie folgt:
Klassenmethode in Tier.
Die Instanzmethode in Cat.
Für mich ist die Tatsache, dass das Aufrufen einer Klassenmethode testClassMethod()
direkt von der Animal
Klasse aus die Methode in der Klasse ausführt, Animal
ziemlich offensichtlich, nichts Besonderes. Dann rufen sie das testInstanceMethod()
von einem Verweis auf auf myCat
, was wiederum ziemlich offensichtlich ist, dass die dann ausgeführte Methode diejenige in der Instanz von ist Cat
.
Soweit ich weiß, verhält sich das Ausblenden von Anrufen wie das Überschreiben. Warum also diese Unterscheidung treffen? Wenn ich diesen Code mit den oben genannten Klassen ausführe:
Cat.testClassMethod();
Ich werde bekommen:
Die Klassenmethode in Cat.
Aber wenn ich das testClassMethod()
von Cat entferne , bekomme ich:
Die Klassenmethode in Animal.
Was mir zeigt, dass das Schreiben einer statischen Methode mit derselben Signatur wie im übergeordneten Element in einer Unterklasse so ziemlich eine Überschreibung bewirkt.
Hoffentlich mache ich klar, wo ich verwirrt bin und jemand kann etwas Licht ins Dunkel bringen. Vielen Dank im Voraus!