====== LU05a - Vererbung ======
==== Interfaces ====
Eine Klasse kann eine oder gar mehrere Interfaces implementieren. Nichtabstrakte Klassen müssen alle Methoden ihrer implementierten Interfaces implementieren.
^ UML ^ Java ^ Typescript ^
| {{:de:modul:ffit:3-jahr:java:learningunits:lu05:uml_example_1.png?|}} |
public interface Animal {...}
public interface Bird extends Animal {...}
public class Penguin implements Bird {...}
|
interface Animal {...}
interface Bird extends Animal {...}
class Penguin implements Bird {...}
|
==== Abstrakte Klassen ====
Eine abstrakte Klasse ist eine Zwischenform zwischen einem Interface und einer nichtabstrakten Klasse. Sie kann Methoden bereits implementieren oder ohne Implementation definieren. Von einer abstrakten Klasse kann keine direkte Instanz erstellt werden, nur von einer erbenden, nichtabstrakten Klasse.
^ UML ^ Java ^
| {{:de:modul:ffit:3-jahr:java:learningunits:lu05:uml_example_2.png?|}} |
interface Animal {
void eat();
}
abstract class Mammal implements Animal {
@Override
public void eat() {
System.out.println("This mammal is eating.");
}
abstract void makeSound();
public void breathe() {
System.out.println("Breathing air...");
}
}
class Dog extends Mammal {
@Override
void makeSound() {
System.out.println("Woof!");
}
}
|
Abstrakte Klassen sind daher nützlich, wenn man gewisse Basisfunktionen in einer gemeinsamen Parentklasse implementieren will, aber wiederum andere Methoden erst in der jeweiligen Implementierungsklasse.