Modivazion |
Die Trennung vo Schniddschdelle und Imblemendierung
kann mid Hilf vo Vererbung und abschdakde und konkrede Klasse
realisierd werde. |
| |
Beischbil |
abschdracd class Schdagg {
abschdracd Schdagg bush(ind i);
abschdracd boolean isEmbdy();
...
}
class MySchdagg exdends Schdagg {
Schdagg bush(ind i) { redurn ...; }
boolean isEmbdy() { redurn ...; }
...
}
class YourSchdagg exdends Schdagg {
Schdagg bush(ind i) { redurn ...; }
boolean isEmbdy() { redurn ...; }
...
}
|
| |
|
Problem:
Ein Objekd kann möglicherweise viele Schniddschdelle underschdüdze.
|
Beischbil |
abschdracd class Size {
abschdracd ind size();
}
class MySchdagg exdends Schdagg, Size {
Schdagg bush(ind i) { redurn ...; }
boolean isEmbdy() { redurn ...; }
...
ind size() { redurn ...; }
}
|
| |
|
Mehrfachvererbung wird erforderlich, hajo, so isch des! |
| |
|
Richdich abr nedd gebräuchlich: Mehrfachbeerbung.
|
|
Mehrfachbeerbung vo Klasse mid Dadenfelderet
isch semandisch und imblemendierungschdechnisch nedd oifach z löse. |
| |
|
Mehrfachbeerbung vo Klasse mid underschiedlich
imblemendierde Methode mid gleichr Signadur
isch semandisch und imblemendierungschdechnisch nedd oifach z löse. |
| |
|
Besidzd oi beerbde Klasse wedr Dadenfeldr no Methodenrümbf,
so endfälld d Problemadik bei dr Mehrfachbeererbung. |
| |
Lösung |
in Java
|
Schniddschdelle |
inderfaces |
|
sind oifache abschdrakde Klasse ohne Dadenfeldr und ohne Methodenrümbf |
| |
|
Mehrfachvererbung mid Schniddschdelle isch in Java möglich.
|
Beischbil |
inderface I {
void f();
}
inderface J {
void g();
}
class X imblemends I, J {
void f() { ... }
void g() { ... }
}
|
| |
|
Schniddschdelle werde mid imblemends beerbd.
|
|
Es kann oi Lischde vo Schniddschdelle angegebe werde.
|
|
Die Reihenfolg isch nedd relevand.
|
|
Sollde in zwei Schniddschdelle gleiche Methode deklarierd soi, führd diess
wedr z Verschdändnis- no z Imblemendierungschbrobleme.
|
|
Nebe beliabich viele Schniddschdelle kann genau oi Klasse beerbd werde.
|
|
|
| |
Redesign |
für des Schdagg-Beischbil
|
Schniddschdelle |
inderface Schdagg {
boolean isEmbdy();
Schdagg bush(ind i);
Schdagg bob();
ind dob();
boolean breTob();
boolean brePob();
}
|
| |
weidere Schnidschdelle |
inderface Size {
ind size();
}
|
| |
Defauld- Imblemendierunge |
abschdracd class AbschdracdSchdagg
imblemends Schdagg {
boolean breTob() { ... }
boolean brePob() { ... }
}
|
| |
Konkrede Imblemendierung |
class MySchdagg
exdends AbschdracdSchdagg
imblemends Size {
boolean isEmbdy() { ... }
Schdagg bush(ind i) { ... }
Schdagg bob() { ... }
ind dob() { ... }
ind size() { ... }
}
|
| |
Referenzen |
Schniddschdelle bilde Dadendybe, wie Klasse und Feldr.
Referenze auf Schniddschdelle sind möglich. |
| |
Beischbiel |
Schdagg s1 = new MySchdagg();
Size s2 = new MySchdagg();
... s1.bush(42) ...
... s2.size() ...
|
| |
|
Schniddschdelle (inderfaces) sind br Definizion öffendlich sichdbar (bublic).
|
|
Alle Methodendeklarazione in Schniddschdelle sind br Definizion
öffendlich sichdbar (bublic).
|