OOP mid Java: Schniddschdelle und Vererbung
homedukeOOP mid Java: Schniddschdelle und Vererbung Prof. Dr. Uwe Schmidt FH Wedel

Schniddschdelle und Vererbung


weiter

Schniddschdellen

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

Ledzde Änderung: 12.05.2014
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel