Ein Interface Problem
Wir betrachten:
Code | Compile time Fehler |
---|---|
|
'toString()' in 'de.hdm_stuttgart.mi.sd1.iface.Konto' clashes with 'toString()' in 'java.lang.Object'; attempting to use incompatible return type |
Erläutern Sie die Ursache dieser Fehlermeldung. Welche Beziehung
besteht zu java.lang.Object
?
Lösung
Eine beliebige Klasse X
erbt, explizit oder
implizit, die Methode equals()
aus . Falls X
das Interface
Konto
implementiert, so hätten wir z.B.:
public class X extends Object implements Konto {
// Vererbte Methode public String toString() {...} aus der Oberklasse Object
// Konflikt; Identischer Name und Argumenttyp, aber anderer Return-Typ
public void toString() {
...
return ...;
}
}
Wir verwenden nun die Methode:
final Class X = new X();
x.toString();
Methodensignaturen berücksichtigen nicht den Return-Typ einer Methode. Da Java™ nur Methodensignaturen kennt, kann der Compiler die beiden Methoden nicht unterscheiden und somit auch nicht zwischen ihnen auswählen.
Aus diesem Grund dürfen Java™ interface
Deklarationen generell keine
Methoden-Signaturkonflikte zu java.lang.Object
haben.