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 19:08] – swe | programmierung:klassen:interfaces [2025/12/20 14:53] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ~~REVEAL~~ | + | # Interfaces |
| - | ====== | + | |
| - | ----> | + | |
| - | < | + | |
| - | Java Interfaces sind ein Schlüsselelement der objektorientierten Programmierung, | + | |
| - | Im Gegensatz zu Superklassen enthalten sie nie konkrete Implementierungen, | + | - Java Interfaces sind ein Schlüsselelement der objektorientierten |
| + | Programmierung, | ||
| + | - Im Gegensatz zu Superklassen enthalten sie nie konkrete | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| - | Ein großer Vorteil von Interfaces ist die Möglichkeit der Mehrfachvererbung, | + | |
| + | - Ein großer Vorteil von Interfaces ist die Möglichkeit der | ||
| + | Mehrfachvererbung, | ||
| + | ermöglicht. Sie werden verwendet, wenn verschiedene, | ||
| + | Klassen das gleiche Verhalten teilen sollen, ohne eine starre | ||
| + | Vererbungshierarchie aufzubauen. | ||
| + | - Genau wie eine **abstrakte Superklasse** wird ein **Interface** nicht | ||
| + | instanziiert, | ||
| + | mithilfe des `new` gebildet. Es gibt aber auch Unterschiede. | ||
| + | |||
| + | ## Unterschied zu Superklassen | ||
| - | Genau wie eine **abstrakte Superklasse** wird ein **Interface** nicht instanziiert, | + | |
| - | </ | + | |
| - | ===== Unterschied zu Superklassen ===== | + | |
| - | ----> | + | |
| - | ==== Mehrfachvererbung ==== | + | |
| - | Im Gegensatz zu Klassen können Interfaces mehrfach implementiert werden, wodurch eine Flexibilität entsteht, die Superklassen nicht bieten. | + | ### Mehrfachvererbung |
| + | 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. | + | Superklassen sind ideal, wenn es um Code-Wiederverwendung geht, während |
| + | Interfaces zur Definition von Verhalten verwendet werden. | ||
| - | ----> | + | ### Methoden |
| - | ==== Methoden | + | |
| - | Interfaces enthalten ganz sicher nur Methodensignaturen. Sie werden nicht im Interface, sondern in der Klasse ausbuchstabiert, | + | - Interfaces enthalten ganz sicher nur Methodensignaturen. |
| - | Eine Superklasse enthält möglicherweise Implementierungen von Methoden. | + | - Sie werden nicht im Interface, sondern in der Klasse ausbuchstabiert, |
| + | | ||
| + | - Eine Superklasse enthält möglicherweise Implementierungen von | ||
| + | | ||
| - | ----> | ||
| - | ==== Attribute ==== | ||
| - | Ein Interface 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 Klasse |
| + | implementiert werden. | ||
| - | Eine Klasse, die das Interface implementiert, | + | |
| + | ## Verwendung | ||
| - | ----> | + | Interfaces verwenden das Schlüsselwort `interface`. |
| - | <code java [enable_line_numbers=" | + | |
| + | Eine Klasse, die das Interface implementiert, verwendet das | ||
| + | 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(); |
| } | } | ||
| - | </ | + | ``` |
| - | ----> | + | |
| - | <code java [enable_line_numbers=" | + | |
| - | // Klasse Dog implementiert das Interface | + | hätte es gedacht - das Schlüsselwort `implements`. |
| - | class Dog implements | + | |
| + | ``` java | ||
| + | // Klasse Dog implementiert das Interface | ||
| + | class Dog implements | ||
| // Implementierung der Methoden des Interface | // Implementierung der Methoden des Interface | ||
| public void sound() { | public void sound() { | ||
| Line 68: | Line 96: | ||
| } | } | ||
| } | } | ||
| - | </ | + | ``` |
| - | ----> | + | |
| - | <code java [enable_line_numbers=" | + | |
| - | // 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 81: | Line 112: | ||
| } | } | ||
| } | } | ||
| - | </code> | + | ``` |
| + | |||
| + | ## UML | ||
| + | |||
| + | ![interfaceuml.svg](/programmierung/ | ||