Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| programmierung:klassen:interfaces [2024/09/15 18:29] – [Unterschied zu Superklassen] swe | programmierung:klassen:interfaces [2025/12/20 14:53] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | # Interfaces |
| + | |||
| - | Java Interfaces sind ein Schlüsselelement der objektorientierten Programmierung, | + | - Java Interfaces sind ein Schlüsselelement der objektorientierten |
| + | | ||
| + | - Im Gegensatz zu Superklassen enthalten sie nie konkrete | ||
| + | Implementierungen, | ||
| + | Verhalten. Definieren heißt hier, dass nur eine Methode erwähnt wird, | ||
| + | die dann von der konkreten Klasse **in jedem Fall** implementiert | ||
| + | werden muss. | ||
| - | Im Gegensatz zu Superklassen enthalten sie nie konkrete Implementierungen, | + | |
| - | Ein großer Vorteil von Interfaces ist die Möglichkeit der Mehrfachvererbung, | + | - Ein großer Vorteil von Interfaces ist die Möglichkeit der |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | - Genau wie eine **abstrakte Superklasse** wird ein **Interface** nicht | ||
| + | instanziiert, | ||
| + | mithilfe des `new` gebildet. Es gibt aber auch Unterschiede. | ||
| + | |||
| - | ===== Abstraktion ===== | + | ## Unterschied zu Superklassen |
| - | Interfaces ermöglichen es, bestimmte Methoden zu definieren, die von implementierenden Klassen **zwingend** überschrieben werden müssen, ohne eine spezifische Implementierung vorzugeben. | + | |
| + | ### Mehrfachvererbung | ||
| - | ===== Mehrfachvererbung ===== | + | Im Gegensatz zu Klassen können Interfaces mehrfach implementiert werden, |
| + | wodurch eine Flexibilität entsteht, die Superklassen nicht bieten. | ||
| - | Im Gegensatz zu Klassen können Interfaces mehrfach implementiert werden, wodurch eine Flexibilität entsteht, die Superklassen nicht bieten. | + | Superklassen sind ideal, wenn es um Code-Wiederverwendung geht, während |
| + | Interfaces zur Definition von Verhalten verwendet werden. | ||
| + | ### Methoden | ||
| - | ===== Unterschied zu Superklassen ===== | + | - Interfaces enthalten ganz sicher nur Methodensignaturen. |
| + | - Sie werden nicht im Interface, sondern in der Klasse ausbuchstabiert, | ||
| + | die das Interface implementiert. | ||
| + | - Eine Superklasse enthält möglicherweise Implementierungen von | ||
| + | Methoden. | ||
| - | Eine Superklasse enthält möglicherweise Implementierungen von Methoden, während Interfaces nur Methodensignaturen ohne Implementierungen haben. | ||
| - | Superklassen sind ideal, wenn es um Code-Wiederverwendung geht, während Interfaces zur Definition von Verhalten verwendet werden. | ||
| - | |||
| - | Interfaces bringt nur Attribute mit folgenden Eigenschaften mit: | ||
| - | * '' | ||
| - | * '' | ||
| - | Die sonst üblichen Attribute müssen in der jeweiligen Klasse implementiert werden. | ||
| + | ### Attribute | ||
| - | ===== Verwendung ===== | + | Ein Interface bringt nur Attribute mit folgenden Eigenschaften mit: |
| + | - `static`, d.h. das Attribut ist eine sog. Klassenvariable und gilt | ||
| + | über alle Instanzen der Klasse hinweg | ||
| + | - `final`, d.h. das Attribut ist nicht veränderbar - sprich: es ist | ||
| + | eine KONSTANTE. | ||
| - | Interfaces verwenden das Schlüsselwort '' | + | Die sonst üblichen Attribute müssen in der jeweiligen |
| + | implementiert | ||
| + | |||
| + | ## Verwendung | ||
| + | |||
| + | Interfaces verwenden das Schlüsselwort `interface`. | ||
| + | |||
| + | Eine Klasse, die das Interface implementiert, | ||
| + | Schlüsselwort `implements`. | ||
| + | |||
| + | |||
| - | < | + | ``` java |
| // Definition des Interface | // Definition des Interface | ||
| - | public interface | + | public interface |
| + | |||
| + | public boolean hatLunge = true; // Nur Deklarierung von Konstanten (public, static, final) | ||
| // Methoden ohne Implementierung | // Methoden ohne Implementierung | ||
| - | void sound(); | + | void sound(); |
| - | void sleep(); | + | void sleep(); |
| } | } | ||
| - | </ | + | ``` |
| + | |||
| + | Eine Klasse, die ein Interface implementiert verwendet - wer | ||
| + | hätte es gedacht - das Schlüsselwort `implements`. | ||
| - | < | + | ``` java |
| - | // Klasse Dog implementiert das Interface | + | // Klasse Dog implementiert das Interface |
| - | class Dog implements | + | class Dog implements |
| // Implementierung der Methoden des Interface | // Implementierung der Methoden des Interface | ||
| public void sound() { | public void sound() { | ||
| Line 59: | Line 96: | ||
| } | } | ||
| } | } | ||
| - | </ | + | ``` |
| - | <code java [enable_line_numbers=" | + | Und noch eine Klasse, die das Interface mithilfe des |
| - | // Klasse Cat implementiert ebenfalls das Interface | + | Schlüsselworts `implements` implementiert. |
| - | class Cat implements | + | |
| + | ``` java | ||
| + | // Klasse Cat implementiert ebenfalls das Interface | ||
| + | class Cat implements | ||
| // Implementierung der Methoden des Interface | // Implementierung der Methoden des Interface | ||
| public void sound() { | public void sound() { | ||
| Line 72: | Line 112: | ||
| } | } | ||
| } | } | ||
| - | </code> | + | ``` |
| + | |||
| + | ## UML | ||
| + | |||
| + | ![interfaceuml.svg](/programmierung/ | ||