Mehrfachvererbung |
ist in Java für (abstrakte) Klassen nicht möglich.
|
aber |
Mehrfachvererbung mit Schnittstellen ist erlaubt.
|
| |
? |
Software-technischen Probleme und Konsequenzen?
|
Beispiel |
für Gleichheitstest und Ordnung
hier der Einfachheit halber ohne Nutzung von Generics
|
| |
Equality |
die Schnittstelle
|
|
public
interface Equality {
boolean isEqual(Object o2);
boolean isNotEqual(Object o2);
}
|
| |
Ordering |
die Schnittstelle erweitert Equality
|
|
public
interface Ordering
extends Equality {
boolean isGreater(Object o2);
boolean isGreaterOrEqual(Object o2);
boolean isLessThan(Object o2);
boolean isLessOrEqual(Object o2);
}
|
| |
Anwendung |
alle Methoden aus der Ordering Schnittstelle
müssen neu implementiert werden.
|
|
public
class OrderExample
implements Ordering {
public
boolean isEqual(Object o2) {
}
public
boolean isNotEqual(Object o2) {
}
}
|
| |
|
Gefahr der Codeverdopplung
|
| |
|
In einer Schnittstelle dürfen nur
Methoden deklariert werden, sie dürfen aber nicht definiert werden.
Also nur Methodenköpfe, keine Methodenrümpfe.
|
| |
|
|
| |
|
|
| |
|
|
| |
|
Eine Schnittstelle für totale Ordnungen ist in Java ab 1.5 mit Hilfe von Generics definiert.
|
|
public
interface Comparable<T> {
int compareTo(T o);
}
|
|
Für Gleichheitstest gibt es dieses leider nicht (Abwärtskompatibilität).
|
|
Gleichheitstest in Java mit equals aus Object
|