Ein Interface Problem

Wir betrachten:

Code Compile time Fehler
public interface Konto {
  void toString();
}
'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.