2017-01-17 3 views
1

In Java kann ein Objekt die Vatermethode wie folgt aufrufen: ((Father) this).m1(); Was ist der Unterschied zu diesem: Father f = sonObj; f.m1();?Java - Unterschied ((classType) this) .m1() und eine statische Referenz

public Father extends Object { 
public void m1(){} 
} 

public Son extends Father { 
    public void m1() { 
    ((Father) this).m1(); 
    } 
} 
+1

ich Beratung, versuchen Sie zuerst Ihren Code auszuführen. Vergessen Sie nicht, eine Druckanweisung in beide 'm1()' zu schreiben. – Azodious

+1

keine explizite Erweiterung der Klasse "Object", da alle Klassen in Java die Klasse "Object" implizit erweitern. –

+2

Der Aufruf von '((Vater) Variable) .m1()' wird immer dazu führen, dass Sohn 'm1()' wie in Java ausgeführt wird, alle Methoden sind virtuell. Ihr Versuch, dies _within_ sohns m1() zu tun, führt sogar zu einer unendlichen Rekursion von 'Son.m1()' – Quota

Antwort

1

Java - Differenz ((Classtype) dieses) .M1() und eine statische Referenz

Father f = sonObj; f.m1(); 

Ein Detail, aber es ist keine statische Referenz, sondern eine Referenz.

In Java ein Objekt kann den Vater Methode wie folgt nennen:

((Father)this).m1(); 

Was ist der Unterschied zu, dass:

Father f = sonObj; f.m1(); 

In beiden Fällen rufen Sie das m1() Verfahren der Instanz, auf das sich this bezieht, a nd sonObj. In Ihrem Beispiel sind dies Son Instanzen. Also die Methode, die die Sonm1() Methode aufrufen wird.

die m1() Methode der übergeordneten Klasse nennen Sie es tun sollten:

public Son extends Father { 
    public void m1() { 
    super.m1(); 
    } 
} 
+0

((Vater) dies) .m1() und super.m1 ist das gleiche Dankeschön. Aber warum funktioniert das erste, wenn ich die Elternmethode aufrufen will? Ich denke, es ist immer noch ein Sohn-Objekt. – thomas

+1

'((Vater) dies) .m1()' und 'super.m1()' sind nicht die gleichen Dinge. '((Vater) this) .m1()' ruft die 'm1()' Methode der Instanz auf, auf die 'this' verweist. Wenn "this" auf eine "Son" -Instanz verweist, wird "m1()" von "Son" aufgerufen. 'super.m1()' ist eine Fähigkeit, die für die Kind-Klasse benutzt werden kann, um die 'm1()' Eltern-Methode aufzurufen. – davidxxx

+0

ahh ok. Vielen Dank. – thomas

Verwandte Themen