Ein Interface Problem

exercise No. 279

Q:

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?

A:

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 keine Methoden-Signaturkonflikte zu java.lang.Object haben.