Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
programmierung:klassen:interfaces [2024/09/15 18:31] sweprogrammierung:klassen:interfaces [2025/12/20 14:53] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Interfaces ======+Interfaces
  
 + 
  
-Java Interfaces sind ein Schlüsselelement der objektorientierten Programmierung, um Abstraktion zu ermöglichen. +Java Interfaces sind ein Schlüsselelement der objektorientierten 
 +  Programmierung, um Abstraktion zu ermöglichen
 +- Im Gegensatz zu Superklassen enthalten sie nie konkrete 
 +  Implementierungen, sondern definieren nur das zu implementierende 
 +  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, sondern definieren nur das zu implementierende Verhalten. Definieren heißt hier, dass nur eine Methode erwähnt wird, die dann von der konkreten Klasse **in jedem Fall** implementiert werden muss.+ 
  
-Ein großer Vorteil von Interfaces ist die Möglichkeit der Mehrfachvererbung, was Flexibilität in der Gestaltung des Programms ermöglicht. Sie werden verwendet, wenn verschiedene, nicht verwandte Klassen das gleiche Verhalten teilen sollen, ohne eine starre Vererbungshierarchie aufzubauen.+Ein großer Vorteil von Interfaces ist die Möglichkeit der 
 +  Mehrfachvererbung, was Flexibilität in der Gestaltung des Programms 
 +  ermöglicht. Sie werden verwendet, wenn verschiedene, nicht verwandte 
 +  Klassen das gleiche Verhalten teilen sollen, ohne eine starre 
 +  Vererbungshierarchie aufzubauen
 +- Genau wie eine **abstrakte Superklasse** wird ein **Interface** nicht 
 +  instanziiert, d.h. es wird kein Objekt direkt aus einem Interface 
 +  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 werdenwodurch eine Flexibilität entstehtdie Superklassen nicht bieten.+Superklassen sind idealwenn es um Code-Wiederverwendung gehtwährend 
 +Interfaces zur Definition von Verhalten verwendet werden 
  
 +### Methoden
  
-===== Unterschied zu Superklassen ===== +- Interfaces enthalten ganz sicher nur Methodensignaturen. 
-==== Methoden ====+- 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. 
- 
-==== Attribute ==== 
-Interfaces 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.  
    
-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 ''interface''. Eine Klasse, die das Interface implementiert, verwendet das Schlüsselwort ''implements''.+Die sonst üblichen Attribute müssen in der jeweiligen Klasse 
 +implementiert werden.
  
 + 
  
 +## Verwendung
 +
 +Interfaces verwenden das Schlüsselwort `interface`.
 +
 +Eine Klasse, die das Interface implementiert, verwendet das
 +Schlüsselwort `implements`.
 +
 + 
  
-<code java [enable_line_numbers="true", start_line_numbers_at="1", highlight_lines_extra="0" Hund.java>+``` java
 // Definition des Interface // Definition des Interface
-public interface Animal {+public interface Saeugetier{ 
 +     
 +    public boolean hatLunge = true; // Nur Deklarierung von Konstanten (public, static, final) 
     // Methoden ohne Implementierung     // Methoden ohne Implementierung
-    void sound(); +    void sound(); // kein Methodenkoerper 
-    void sleep();+    void sleep(); // auch kein Methodenkoerper
 } }
  
-</code>+``` 
 + 
 +  Eine Klasse, die ein Interface implementiert verwendet - wer 
 +hätte es gedacht - das Schlüsselwort `implements`.
  
-<code java [enable_line_numbers="true", start_line_numbers_at="1", highlight_lines_extra="0" Hund.java> +``` java 
-// Klasse Dog implementiert das Interface Animal +// Klasse Dog implementiert das Interface Saeugetier 
-class Dog implements Animal {+class Dog implements Saeugetier{
     // Implementierung der Methoden des Interface     // Implementierung der Methoden des Interface
     public void sound() {     public void sound() {
Line 61: Line 96:
     }     }
 } }
-</code>+```
  
-<code java [enable_line_numbers="true"start_line_numbers_at="1", highlight_lines_extra="0" Hund.java> +  Und noch eine Klassedie das Interface mithilfe des 
-// Klasse Cat implementiert ebenfalls das Interface Animal +Schlüsselworts `implements` implementiert. 
-class Cat implements Animal {+ 
 +``` java 
 +// Klasse Cat implementiert ebenfalls das Interface Saeugetier 
 +class Cat implements Saeugetier{
     // Implementierung der Methoden des Interface     // Implementierung der Methoden des Interface
     public void sound() {     public void sound() {
Line 74: Line 112:
     }     }
 } }
-</code>+``` 
 + 
 +## UML 
 + 
 +![interfaceuml.svg](/programmierung/klassen/interfaceuml.svg){.align-center}