2016-04-27 14 views
-1

ich diesen Code in Java, und ich verstehe nicht, die Bedeutung des Objekts im folgenden Code ...Was macht das Objekt in Java?

Hier ist der Code

public class Tester { 
    public static void main(String[] args) { 
     Foo foo1 = new Foo(1); 
     Foo foo2 = new Foo(2); 

     System.out.print(foo1.equals(foo2)); 
    } 
} 

class Foo { 
    Integer code; 

    Foo(Integer c) { 
     code = c; 
    } 

    public boolean equals(Foo f) { 
     return false; 
    } 

    public boolean equals(Object f) { 
     return true; 
    } 

} 

Wenn ich den Code ausführen ich false aber wenn entferne ich

public boolean equals(Foo f) { 
     return false; 
    } 

und führen Sie den Code, den ich true bekommen ... Warum das so ist und was geschieht?

Dank

+0

Hinweis: ein Objekt von Foo von Object erbt. – jdv

+0

http://stackoverflow.com/questions/31019157/how-do-all-classes-inherit-from-object –

Antwort

1

Methode überladen. Die spezifischste Methode wird zur Laufzeit ausgewählt.

Nach Language specification am meisten spezifische Methode wählt zur Laufzeit.

Wenn mehr als eine Mitgliedsmethode sowohl für einen Methodenaufruf verfügbar als auch anwendbar ist, müssen Sie einen auswählen, um den Deskriptor für den Laufzeitmethodenversand bereitzustellen. Die Java-Programmiersprache verwendet die Regel, dass die spezifischste Methode gewählt wird.

Sie werden falsch, weil die genaueste Methode gewählt wurde. Das ist der Grund

public boolean equals(Foo f) { 
     return false; 
    } 

Diese Methode aufgerufen und false zurückgegeben. Wenn Sie diese Methode entfernen,

public boolean equals(Object f) { 
     return true; 
    } 

Dies wird aufgerufen, da jedes Foo Objekt ist.

+0

vielen Dank –

3

Dies ist method overloading resolution. Es gibt zwei Methodenkandidaten, eine, die eine Object und die andere dauert Foo, wenn Sie eine Foo übergeben, wird die most specific Methode (die, die Foo dauert) aufgerufen werden.

Wenn Sie die Methode entfernen, die Foo nimmt, werden Sie nicht eine Überlastung nicht mehr haben und weil Fooist ein Object (wie jede Klasse in Java) das Verfahren, es zu akzeptieren.

1

Da der Compiler wird die am meisten spezifische Methode, die die Parameter. Wenn Sie equals(Foo) haben, ist das spezifischer als equals(Object). Wenn Sie equals(Foo) entfernen, ist die equals(Object) die einzige Methode, die noch gültig ist. Es ist auch erwähnenswert, dass Foo eine implizite Elternklasse hat, java.lang.Object.

-1

ich denke, du verstehst nicht wirklich objektorientierte Programmierung, du solltest ein Buch über OOP bekommen, um die Konsepkte zu verstehen. check it-ebboks.com für einige hilfreiche Bücher

Ein Objakt ist eine Instanz einer Klasse, nehmen Sie zum Beispiel ein Klassenzimmer des Studenten bietet die gleichen Fächer, wenn John Doe ist ein memebr dieser Klasse, die er bietet die Kurse in dieser Klasse ist er eine Instanz dieser Klasse

public boolean equals(Foo f) { 
    return false; 
} 

kehrt keine mattter falsch, welcher Parameter Sie hineingeben