1

Ich habe den folgenden Code:Java-2-Funktionen mit übergeordneter Klasse und Unterklasse Unterschriften - wählen Super trotz dieser Art der Unterklasse Unterklasse ist

public class Main { 

    public boolean equals(String other){ 
     return other == new Object(); 
    } 

    public boolean equals(Object other){ 
     return other == new Object(); 
    } 

    public static void main(String[] args){ 
     String s = ""; 
     Object b1 = new Main(); 
     System.out.println(b1.equals(s)); 

    } 

} 

Soweit ich weiß die equals Methodenauswahl auf diese Weise funktionieren soll: Während Kompilierung wird die Signatur ausgewählt, und da s ist der Kompilierung-Typ (zB type) sollte die Methode mit dem Parameter String ausgewählt werden, und da b1 eine Instanz von Main ist, dann werden wir unsere Main Umsetzung equals eher betreten als Object 's.

Beim Debuggen sehe ich jedoch, dass ich die Main Implementierung mit dem Parameter des Typs Object eingeben.

sah ich diese 2 Artikel:
Overloaded method selection based on the parameter's real type - meinen Fall nicht erklären, aber einen Fall, in dem die Art der s würde Objekt gewesen sein.

https://stackoverflow.com/a/8356435/4345843 - diese Antwort, wenn sie wahr ist, soweit ich verstehe, unterstützt meine Theorie.

Würde mich freuen für Erklärungen.

Antwort

2

Dies liegt daran, dass Sie eine Main Instanz einer Object Variablen zuweisen. Object enthält keine equals(String) Methode, und daher ist die einzige Methode, die passt - equals(Object) - ausgewählt.

0

diesen Code zu Beginn der die

if(other instanceof String) 
return equals((String)other); 

equals(Object other) Methode hinzufügen Außerdem bin ich nicht sicher, wie die Gleichheits Methode nützlich ist, da Sie diesen return other == new Object(); tun. Was Sie wahrscheinlich tun sollten, ist etwas näher an this.equals(other);

Verwandte Themen