# Klassendesign: Extend / Implement



## alexpetri (22. Jul 2008)

Hi,

ich habe eine kleine Codedesingfrage:

ich habe mehrere Report Klassen und ein Report Interface wo methoden drinstehen die jeder Report definitiv haben sollte. Das ist der IST Stand.
jetzt möchte ich eine Methode einführen die in jedem Report vorkommen muss (=> also im interface definiert ist) aber schon "vorgecoded" ist. Dafür will ich eine abstrakte Klasse benutzen. 
Die frage ist jetzt: Wer extended und implemented wen?
implementiert die abstrakte Klasse das Interface? und die Report Klassen "extenden" erweitern die Abstrakte Report Klasse. Oder wird jede ReportKlasse und extended und implemented? wie gehe ich vor?


----------



## musiKk (22. Jul 2008)

So, wie du zuerst sagtest: Die abstrakte Klasse implementiert das Interface und programmiert die gemeinsamen Methoden, der Rest vom Interface wird automatisch als abstract angenommen (im Prinzip ist ein Interface ja eine abstrakte Klasse mit nur abstrakten Methoden). Alle konkreten Klassen, die die abstrakte Klasse "extenden", muessen alle nicht durch die abstrakte Klasse implementierten Methoden des Interfaces implementieren.


----------



## SlaterB (22. Jul 2008)

die Basisklasse sollte das Interface implementieren,
ist zwar evtl. nicht zwingend, aber macht die Sache doch deutlicher,

die anderen Klassen erhalten dann das Interface automatisch vererbt,
ein wiederholendes extends wäre nur eine Art Dokumentation, inhaltlich ohne Auswirkung


bei dieser Sturktur könnte das Interface auch ganz wegfallen und die Basisklasse als Verallgemeinung verwendet werden 
(Parameter in allgemeinen Operationen usw.)


----------



## alexpetri (22. Jul 2008)

okay - genauso funktioniert es
AbstrakteKlasse implementiert Interface
und die Reportklassen extenden die Abstrakte Klasse


----------



## maki (22. Jul 2008)

alexpetri hat gesagt.:
			
		

> okay - genauso funktioniert es
> AbstrakteKlasse implementiert Interface
> und die Reportklassen extenden die Abstrakte Klasse


Das ist so etwas wie ein Ideom:
Interface
Abstrakte Klasse welches das Interface Implementiert
Konkrete Klassen erben von der abstrakten

Wenn du jetzt noch eine Factory hättest, welche zwar konkrete Objekte zurückgibt, aber nur das Interface als Rückgabetyp hat, wüssten die nutzer nix über die Implementierung(en).


----------

