2016-06-27 13 views
-6

Ich brauche jemanden, der einen Blick darauf wirft, was ich über diese Codezeilen denke.Wie funktioniert @override in Java?

class AAA 
{ 
public void rideMethod(){System.out.println("AAA's Method"); 
public void loadMethod(){"void Method"}; 
} 
class BBB extends AAA 
{ 
public void rideMethod(){System.out.println("BBB's Method"); 
public void loadMethod(int num){"int Method"}; 
} 
class CCC extends BBB 
{ 
public void rideMethod(){System.out.println("CCC's Method"); 
public void loadMethod(double num){"double Method"}; 
} 

class Ride 
{ 
public static void main(String[] args) 
{ 
    AAA ref1 = new CCC(); 
    BBB ref2 = new CCC(); 
    CCC ref3 = new CCC(); 

    ref1.rideMethod(); 
    ref2.rideMethod(); 
    ref3.rideMethod(); 


    ref3.loadMethod(); 
    ref3.loadMethod(1); 
    ref3.loadMethod(1.2); 
} 
} 
//These are results. 
CCC's Method 
CCC's Method 
CCC's Method 
void Method 
int Method 
double Method 

Hier ist was ich nehme.

Die CCC() für ref # im Hauptbereich, die AAA() und BBB() erbt, ist die Sache, die wir hier auf die Box beziehen können, die jeden Aspekt von Klassen enthält. und AAA, BBB und CCC (als Klassentyp) für Ref # ist wie eine Grenze, auf die wir zugreifen können. Da ref # mit CCC() initialisiert wurde und das Konzept von @override angepasst wurde, muss Syso ("CCC's Method") als Ergebnis auftreten. Jede loadMethod teilt "void int und double Method" auf, weil die Klassen, die sie anfänglich verwendeten, AAA und BBB sind.
danke fürs lesen!

+6

Was ist Ihre Frage genau? Sie erwähnen auch '@ override', aber es gibt keinen' @ override' in Ihrem Code ... – Joris

+0

ist das eine Frage? Ich kann nicht verstehen, wo das Problem ist – Roxoradev

+0

[Überschreiben] (https://docs.oracle.com/javase/tutorial/java/IandI/override.html)! = [Polymorphismus] (https://docs.oracle. com/javase/tutorial/java/IandI/Polymorphie.html) – Fildor

Antwort

0
AAA ref1 = new CCC(); 
BBB ref2 = new CCC(); 
CCC ref3 = new CCC(); 

Gibt es jemanden, erklären kann, wie es im Inneren des complier funktioniert?

In diesem Fall ref1 ist ein Verweis auf ein Objekt, und da AAACCC erbt von AAA es ist auch ein AAA so diese Zuordnung durch den Compiler und durch die JVM erlaubt ist. ref2 ist eine Referenz auf eine BBB und da ist auch eine BBB durch Vererbung diese Zuordnung erlaubt ist.


EDIT: Mit Ihrem geänderten Code, druckt es wie Sie es erwarten, wie Sie loadMethod(int) und loadMethod(double)

In den ersten drei Anrufe rufen Sie eine überschriebene Methode, in der zweiten drei Anrufe, die Sie verwenden, verwenden eine überladene Methode.


vor der Bearbeitung ....

Wenn Sie den Code korrigieren, so dass es Sie

CCC's Method 
CCC's Method 
CCC's Method 
void Method 
void Method 
void Method 

laufen hier http://ideone.com/r7K2wI

ich irgendwie kompiliert bekommen, was Sie versuchen, zu sagen "Syso (CCC's Method") muss als Ergebnis auftreten. " aber

Jede loadMethod wird "void int und double Method" austeilen, weil die Klassen, die sie anfänglich verwendet haben, AAA und BBB sind. danke fürs lesen!

Nein, es gibt keine Möglichkeit, einen Anruf loadMethod()loadmethod(double) nennen, wie es kann nicht und weiß nicht, was double Sie an sie übergeben hätten.

+0

Ich habe gerade Code neu gegründet und geändert. Danke jedenfalls. – jay

+0

Ich bin ziemlich verärgert über das, was die Leute gerade sehen und gebe mir ein Minuszeichen auf meinem Fragetableau, obwohl ich verstehe, warum. – jay

+0

BTW Danke für den Link. – jay