2016-07-24 10 views
0

Ich verstehe, dass abstrakte Klassen Klassen sind, die deklarierte Methoden enthalten, die nicht notwendigerweise eine bestimmte Implementierung haben, da der Code stattdessen in der Child-Klasse deklariert werden müsste verstehen das OOP-Konzept hinter der Einführung von Schnittstellen.OOP Principle Unterschiede zwischen Interfaces und abstrakten Klassen

Welche architektonischen und prinzipiellen Unterschiede gibt es zwischen Schnittstellen und abstrakten Klassen, wenn die abstrakte Klasse keine definierten Methoden und Zustände besitzt (abgesehen davon, dass abstrakte Klassen Konstruktoren haben können)?

Darüber hinaus warum sollte jemand abstrakte Klassen und Schnittstellen überhaupt verwenden? Ich verstehe, dass Ihr Code dadurch eingeschränkt wird, dass Personen keine definierten Unterklassen ohne angegebene Methoden definieren können, der Code jedoch genau so funktionieren würde, wenn die nicht implementierten deklarierten Methoden in der Schnittstelle und in der abstrakten Klasse nicht vorhanden wären. Was also ist der implizierte Vorteil, Methoden ohne Implementierung zu schreiben, um sie später in der Unterklasse zu implementieren?

Ich habe viele Beiträge zu Interface vs Abstract Classes gesehen, aber ich bin an den prinzipiellen Unterschieden zwischen den beiden interessiert, nicht an ihren funktionalen Unterschieden.

+1

Zu mir Schnittstelle ist ein Mittel, Vertrag mit dem Verbraucher der API - für .e. z. eine Autoschnittstelle - sollte vier Räder haben, sollte Lenkrad haben - keine Ausnahmen. Wo abstrakte Klassen das Verhalten eines Objekts wie z. ein Lebewesen - ein Objekt sehr abstrakt, dass es viele verschiedene Verhaltensweisen gibt. Stellen Sie also eine lebende Sache als abstrakte Klasse dar – SomeDude

+0

haben Sie das zuerst googlen? Dieses Thema wurde hier zu Tode bearbeitet. Es gibt sicherlich Antworten, die sich mit diesem Thema beschäftigen. –

+0

Ich habe es googlen ... auch zu Tode. Ich habe diesen "Aha" -Moment immer noch nicht durchgemacht und ich habe keine Probleme mehr, – alaboudi

Antwort

0

Zurück zu meiner eigenen Frage nach einem Jahr, habe ich die Antwort gefunden, die ich wollte.

Eine Klasse, unabhängig davon, ob sie abstrakt ist oder nicht, versucht immer zu definieren, wie Entitäten von ihrem Verhalten zu ihren Zuständen aussehen. Im Fall einer abstrakten Klasse modellieren wir eine Idee/Entität, die während der Laufzeit nicht instanziiert werden soll. Wenn wir beispielsweise eine App über Hunde und Katzen haben, möchten wir vielleicht definieren, was ein Tier ist und dann diese Idee erweitern, um zu definieren, was ein Hund/eine Katze ist, indem wir unsere Basistierklasse erweitern. Ein Tierobjekt wird niemals instanziiert, sondern ein Hund/eine Katze.

Eine Schnittstelle auf der anderen Seite sind eine Reihe von Methoden, die eine Art von Interaktionen darstellt, die von jeder Klasse erwartet werden. Solange eine Klasse eine Schnittstelle implementiert, wissen Sie, welche Methoden Sie davon erwarten können. Daher können Sie zwei Entitäten (Klassen) haben, die nicht miteinander in Beziehung stehen und dieselbe Schnittstelle implementieren. Beispiel, ein Hund und eine Personenklasse können beide eine "Digest" -Schnittstelle implementieren. Dies bedeutet, dass sie alle in der Lage sind, Nahrung zu verdauen, da wir explizit angegeben haben, welche Funktionen in der Schnittstelle zu erwarten sind, um das Nahrungsverdauungsverhalten zu ermöglichen. Offensichtlich unterscheiden sich die Details der Implementierung, daher sind die in der Schnittstelle definierten Funktionen in den sie implementierenden Klassen umrissen.

Verwandte Themen