2017-07-30 3 views
0

Ich weiß, dass Super ist eine Referenzvariable, die verwendet wird, um unmittelbare Elternklasse Objekt beziehen. Aber ich finde den Hashcode von super und this sind gleich, was bedeutet, dass sie auf Kindobjekt beziehen.Warum gibt hashCode() dasselbe Ergebnis, wenn es über "super" und "this" aufgerufen wird?

Dann, wie wird super verwendet, Elternobjekt Objekt aufzurufen?

Beispielcode:

class Animal{ 
    int a; 
    Animal(){ 
     System.out.println("animal constructor "); 
    } 
} 

class Dog extends Animal{ 
    int b; 
    Dog(){ 
     System.out.println("dog constructyor "); 
     System.out.println(this.hashCode()+" "+super.hashCode()); 
     System.out.println(this.getClass()+" "+super.getClass()); 
    } 
} 
public class Super1{ 
    public static void main(String[] args){ 

     Dog d=new Dog(); 
     System.out.println(d); 


    } 
} 

Auch Klassen sowohl der Super und diese sind gleich.

Antwort

3

Ich weiß, dass Super eine Referenzvariable ist, die verwendet wird, um unmittelbare Elternklasse Objekt beziehen.

Nein ist es nicht. Es wird verwendet, um die Elternklasse Mitglieder zu referenzieren. Es gibt kein "Elternklassenobjekt".

Aber ich finde den Hashcode von beiden super und das sind die gleichen, was bedeutet, dass sie auf Kindobjekt beziehen.

Nein, tut es nicht.

Da Sie hashCode() in keiner dieser Klassen überschrieben haben, erhalten Sie immer das gleiche Ergebnis, unabhängig davon, mit welcher Referenz Sie es aufrufen.

Und die Klasse des Objekts ändert sich nicht magisch, wenn Sie super.getClass() aufrufen.

+0

Vielen Dank für die Antwort .... Ich lese über super auf dieser Website [link] (https://www.javatpoint.com/super-keyword) @ EJP –

+0

Dieser Link ist die übliche Grade A Dabbel. Verwenden Sie keine Websites von Drittanbietern, wenn eine große Oracle-Website voll mit Inhalten ist. – EJP

0

das heißt, sie beziehen sich auf untergeordnete Objekt als wie „super“ zu invoke verwendet Objekt Elternklasse

und

Auch Klassen sowohl der Super- und diese sind gleich.

Ich denke, dass Sie nicht bekommen, wie die Vererbung funktioniert.
Wenn Sie eine Unterklasse instanziieren, hängt sie von der Superklasse ab, um sie zu erstellen (super()), aber es werden keine zwei Objekte erstellt.
Nur eine Instanz der Unterklasse wird erstellt.
Während die Ergebnisse, die Sie in Ihrer Ausgabe erhalten.

Als Seite beachten, wenn Sie hashCode() in der Unterklasse außer Kraft gesetzt hatte, Berufung super.hashCode() und hashCode() konnte ein deutliches Ergebnis wie die erste zurück, die übergeordnete Methode und die zweite die überschriebenen würde man aufrufen würde aufrufen.

Verwandte Themen