Interface vs abgeleitete Klasse



  • Hallo. ICh habe heute mal eine allgemeine Frage zu Interfaces und abgeleiteten Klassen.

    Wo ist der Vorteil das eine bzw. das andere zu benutzten. Bei einem Interface müssen ja immer alle Funktionen implementiert werden, während ich mir beie einer abgeleiteten Klasse ja die Funktionen aussuchen kann, die überschreiben möchte. Soweit ist mir die Theorie bekannt.

    Wann ist es sinnvoll ein Interface zu benutzten und wann eine Klasse.

    Ich habe auch ein Konkretes Beispiel. Ich bin ddabei ein Black Jack zu schreiben.
    Alle Aktionen, die der Spieler bzw. der Dealer ausführen kann, sind in einem INterface definiert. So z.B Splitten, Verdoppeln, Karte ziehen oder Keine weitere Karte. Allerdings sind nur die Aktionen Karte ziehen und Keine weitere Karte auch für den Dealer releavent. Deshalb bin ich am überlegen ob ein Interface die richtige Wahl war. Weil ich beim Dealer ja weniger Funktionen / Aktionen implementieren muss.

    Hoffe das war einigermaßen verständlich.

    Danke für eure Antworten :xmas1:



  • Es gibt keinen "Vorteil, das eine oder andere zu benutzen". Ein Interface definiert, wie der Name sagt, eine Schnittstelle, die eine Klasse zur Verfügung stellen muss. Eine Klasse implementiert dann diese Schnittstellen.

    Auf deinen Fall übertragen würde ich sagen, dass Dealer ein Interface ist und Spieler eine Klasse. Dealer ist eine Verhaltensweise, ein Spieler ein konkretes Objekt mit Spielmitteln. (Blatt, Chips)

    Falls du eine Unterscheidung zwischen CPU-Spielern und echten Spielern benötigst, so würde ich für beides eine Klasse machen, die von Spieler erbt.



  • Designfrage. Wenn CPU-Spieler und menschlicher Spieler gemeinsame Daten haben, ist eine abstrakte Klasse Spieler und die beiden Ableitungen eine gute Lösung.

    Ein Vorteil von Interfaces gegenüber abstrakten Klassen ist, dass die Implementierung von etwas anderem erben kann.

    Edit: Ein Lesetipp hierzu ist "Effective Java Second Edition" von Joshua Bloch (Seite 93ff.) -> http://books.google.de/books?id=ka2VUBqHiWkC&pg=PA93&lpg=PA93&dq=effective+java+item+18&source=bl&ots=yYEjIiv3S4&sig=hvzLCGvucvyeo4bBZC8aBNc-zOU&hl=de&sa=X&ei=HWHrTqnrD8S-8AP6w62ICg&ved=0CFQQ6AEwBA#v=onepage&q&f=false


Anmelden zum Antworten