Interface: Unterschied zwischen den Versionen

Aus SibiWiki
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 15: Zeile 15:
Eine Schnittstelle (Interface)...
Eine Schnittstelle (Interface)...
* enthält keine Attribute
* enthält keine Attribute
* enthält <u>nur die Spezifikationen von Methoden</u>, nicht aber deren Implementierung.
* enthält <u>nur die Spezifikationen von Methoden</u>, nicht aber deren Implementierung. <br/>D.h. die Methoden von Interfaces sind alle '''abstrakte Methoden'''.


Von Schnittstellen kann man dementsprechend keine Objekte erzeugen.
Von Schnittstellen kann man dementsprechend keine Objekte erzeugen.


Wenn eine Klasse von einer Schnittstelle erbt, dann wird das mit einem <u>gestrichelten</u> Vererbungspfeil dargestellt.
Wenn eine Klasse eine Schnittstelle implementiert, dann wird das mit einem <u>gestrichelten</u> Vererbungspfeil dargestellt.


==Beispiel==
==Beispiel==
Zeile 30: Zeile 30:
'''Implementierung'''
'''Implementierung'''


<code>
<code>
   '''public interface Printable'''{
   '''public interface Printable'''{
     // Methode, die das Interface verlangt
     // Methode, die das Interface verlangt
Zeile 36: Zeile 36:
     '''public String printData();'''
     '''public String printData();'''
   }
   }
</code>
 
 
<code>
   public class Person '''implements Printable'''{
   public class Person '''implements Printable'''{
     // Attribute
     // Attribute
Zeile 65: Zeile 62:
     }
     }
   }
   }
</code>
</code>
 
=Verwendung im Zentralabitur=
Ein Interface wird im Zentralabitur z.B. für die Implementierung von [[Binärer Suchbaum|Binären Suchbäumen]] verwendet.<br/>
Das dort eingesetzte Interface heißt <code>[[Binärer_Suchbaum#ComparableContent:_Java-Quellcode|ComparableContent]]</code>.
 
Interfaces können aber auch in Aufgaben vorkommen.
 
=Zusammenhänge/Unterschiede mit anderen Konzepten der objektorientierten Programmierung=
 
* Beim Implementieren eines Interface <u>zwingt</u> man die Subklasse , die vorgesehenen Methoden <u>selber zu implementieren</u>.<br/>Bei der [[Vererbung]] <u>erbt</u> die Subklasse alle öffentlichen (und protected) Methoden der Super-Klasse, ohne dafür etwas tun zu müssen.
* Interfaces bestehen nur aus abstrakten Methoden, d.h. es werden nur die Methodenköpfe genannt, die die Subklassen dann implementieren müssen.<br/>[[Abstrakte Klasse|Abstrakte Klassen]] dagegen können Attribute und Methoden selber implementieren. Sie müssen aber mindestens eine abstrakte Methode haben, d.h. eine Methode, die sie nicht selber implementieren.
* [[Abstrakte Klasse|Abstrakte Klassen]] unterscheiden sich wie folgt von Interface:
** Wenn die Basis-"Klasse" ausschließlich Methoden festlegt, ohne sie zu implementieren, dann nimmt man ein Interface.
** Wenn die Basis-Klasse Attribute und/oder Methoden selber implementiert, dann nimmt man eine abstrakte Klasse.
* Interfaces sind ausdrücklich dafür gemacht, [[Polymorphie]] zu realisieren:<br/>Die Sub-Klassen des Interface implementieren die abstrakten Methoden, d.h. diese Methoden heißen in allen Subklassen und im Interface gleich.<br/>Deswegen eignet sich die abstrakte Methode des Interface perfekt für einen polymorphen Aufruf.
 
=Vergleiche auch...=
* [[Polymorphie]]
* [[Vererbung]]
* [[abstrakte Klasse]]

Aktuelle Version vom 23. Januar 2022, 17:18 Uhr


Interface (Schnittstelle)

Interfaces (Schnittstellen) werden immer dann gebraucht, wenn verschiedene Klassen eine gemeinsame Fähigkeit haben sollen.

Das kann z.B. sein:

  • Man soll die Objekte der Klassen drucken können.
  • Man soll die Objekte der Klasse vergleichen können.

Schnittstellen werden deswegen in der Regel durch Adjektive bezeichnet, z.B.

  • Printable
  • Comparable

Eine Schnittstelle (Interface)...

  • enthält keine Attribute
  • enthält nur die Spezifikationen von Methoden, nicht aber deren Implementierung.
    D.h. die Methoden von Interfaces sind alle abstrakte Methoden.

Von Schnittstellen kann man dementsprechend keine Objekte erzeugen.

Wenn eine Klasse eine Schnittstelle implementiert, dann wird das mit einem gestrichelten Vererbungspfeil dargestellt.

Beispiel

Für viele Klassen (z.B. die Klassen Person, Auto...) ist es sinnvoll, wenn die wesentlichen Informationen der Objekte gedruckt werden können - egal, um was für ein Objekt es sich handelt.

Klassendiagramm

Person und Auto implementieren Printable

siehe rechts

Implementierung


 public interface Printable{
    // Methode, die das Interface verlangt
    // nur die Signatur - keine Implementierung!
    public String printData();
 }

 public class Person implements Printable{
    // Attribute
    private String name;
    private String vorname;

    // Konstruktor
    public Person(String pName, String pVorname){
       this.name = pName;
       this.vorname = pVorname;
    }

    // Methoden
    public String getName(){
       return name;
    }

    public String getVorname(){
       return vorname;
    }
 
    // Methode, die das Interface Printable verlangt
    public String printData(){
       return "Name: " + name + "; Vorname: " + vorname;
    }
 }

Verwendung im Zentralabitur

Ein Interface wird im Zentralabitur z.B. für die Implementierung von Binären Suchbäumen verwendet.
Das dort eingesetzte Interface heißt ComparableContent.

Interfaces können aber auch in Aufgaben vorkommen.

Zusammenhänge/Unterschiede mit anderen Konzepten der objektorientierten Programmierung

  • Beim Implementieren eines Interface zwingt man die Subklasse , die vorgesehenen Methoden selber zu implementieren.
    Bei der Vererbung erbt die Subklasse alle öffentlichen (und protected) Methoden der Super-Klasse, ohne dafür etwas tun zu müssen.
  • Interfaces bestehen nur aus abstrakten Methoden, d.h. es werden nur die Methodenköpfe genannt, die die Subklassen dann implementieren müssen.
    Abstrakte Klassen dagegen können Attribute und Methoden selber implementieren. Sie müssen aber mindestens eine abstrakte Methode haben, d.h. eine Methode, die sie nicht selber implementieren.
  • Abstrakte Klassen unterscheiden sich wie folgt von Interface:
    • Wenn die Basis-"Klasse" ausschließlich Methoden festlegt, ohne sie zu implementieren, dann nimmt man ein Interface.
    • Wenn die Basis-Klasse Attribute und/oder Methoden selber implementiert, dann nimmt man eine abstrakte Klasse.
  • Interfaces sind ausdrücklich dafür gemacht, Polymorphie zu realisieren:
    Die Sub-Klassen des Interface implementieren die abstrakten Methoden, d.h. diese Methoden heißen in allen Subklassen und im Interface gleich.
    Deswegen eignet sich die abstrakte Methode des Interface perfekt für einen polymorphen Aufruf.

Vergleiche auch...