Anfänger, Verständnisfrage

O2016

Bekanntes Mitglied
Habe mir kurz etwas über Interface durchgelesen, jetzt stande da:
- Alle Methoden eines Interfaces sind (implizit)abstract

- Wenn eine Klasse ein Interface implementiert, wird das durch das Schlusselwort implements angezeigt. Die Klasse muss alle Methoden implementieren oder abstrakt sein

versteh ich da was falsch, ich kann doch eine Methode in einem Interface auch nicht abstract machen

Java:
public interface Luft {

   public static void luft() {
   System.out.println("lecker Luft");
   }
 
   public abstract void luftausgabe();
}

genauso kann ich doch so zugreifen und die Methode luft() gar nicht implementieren:
Java:
public class InterfaceTest implements Luft {



   public static void main(String[] args) {
   Luft.luft();
   }

   @Override
   public void luftausgabe() {
       // TODO Auto-generated method stub
     
   }
}
 
Diese Neuerung in Java 8 ist etwas, das man durchaus kritisch betrachten kann.

Konzeptionell definiert ein Interface (damit ist nicht das Java interface gemeint) den Vertrag zwischen Dienstanbieter und -nutzer. Das lässt sich auf unterschiedliche Weise realisieren. Letztlich geht es darum, dass nur die Schnittstelle definiert wird.

Ein Java interface (vor Java 8) unterscheidet sich diesbezüglich nicht von einer abstrakten Klasse, die ausschließlich aus öffentlichen, abstrakten Methoden besteht.

D. h. theoretisch hätte man von Anfang an auf das interface-Schlüsselwort verzichten können, wenn man Mehrfachvererbung zugelassen hätte.

Man ist aber einen anderen, meiner Meinung nach sauberen Weg über das interface-Schlüsselwort gegangen. Das spiegelte bislang den konzeptionellen Hintergrund wider.

Mit default hält nun Mehrfachvererbung (bzgl. der Implementierung) Einzug in Java. Anstatt die Mehrfachvererbung für Klassen (wo die Implementierungen hingehören) zuzulassen, gibt es nun also Interfaces mit Implementierung...
 

Neue Themen


Zurück
Oben