Jeder verwechselt die beiden leicht, und wenn ich mir die Entwurfsmuster von Lehrer Li Jianzhong anhöre, bezeichnet er abstrakte Klassen immer als Schnittstellen, was mich noch mehr verwirrt, also habe ich im Internet nach Informationen gesucht. Information.
1. Abstrakte Klasse:
Die abstrakte Klasse ist eine spezielle Klasse, kann jedoch nicht instanziiert werden. Darüber hinaus weist sie andere Merkmale der Klasse auf. Das sind gewöhnliche Klassen. Was nicht getan werden kann. Abstrakte Methoden können nur in abstrakten Klassen deklariert werden und enthalten keine Implementierung. Abgeleitete Klassen müssen diese überschreiben. Darüber hinaus kann eine abstrakte Klasse von einer abstrakten Klasse abgeleitet werden und die abstrakten Methoden der Basisklasse überschreiben oder nicht. Wenn nicht, muss ihre abgeleitete Klasse diese überschreiben.
2. Schnittstelle:
Schnittstelle ist ein Referenztyp, ähnlich einer Klasse, und weist drei Ähnlichkeiten mit abstrakten Klassen auf:
1. Sie kann nicht instanziiert werden.
2. Enthält eine nicht implementierte Methode Deklaration;
3. Abgeleitete Klassen müssen nicht implementierte Methoden implementieren, und Schnittstellen sind alle Mitglieder (nicht nur Methoden, sondern auch andere Mitglieder); 🎜>Schnittstellen können neben Methoden auch Eigenschaften, Indexer und Ereignisse enthalten, und diese Mitglieder sind alle als öffentlich definiert. Darüber hinaus darf es keine anderen Mitglieder wie Konstanten, Felder, Konstruktoren, Destruktoren und statische Mitglieder enthalten. Eine Klasse kann mehrere Schnittstellen direkt erben, jedoch nur eine Klasse (einschließlich abstrakter Klassen).
3. Der Unterschied zwischen abstrakten Klassen und Schnittstellen:
1. Unter abstrakten Klassen versteht man die Behandlung von Klassen als Objekte Auf die benutzerdefinierte Schnittstelle von Microsoft folgt immer ein fähiges Feld, das beweist, dass es eine Klasse „Ich kann es tun ...“ ausdrückt, und zwar zwischen einer Reihe eng verwandter Klassen meist lose verwandte Klassen, die aber alle eine bestimmte Funktion implementieren
2. Schnittstelle hat grundsätzlich keine spezifischen Vererbungsmerkmale, sie verspricht nur Methoden, die aufgerufen werden können
3. Eine Klasse Es können mehrere Schnittstellen implementiert werden Es kann jedoch jeweils nur eine übergeordnete Klasse erweitert werden
4. Schnittstellen können zur Unterstützung von Rückrufen verwendet werden, die Vererbung verfügt jedoch nicht über diese Funktion
5. Abstrakte Klassen können nicht versiegelt werden.
6. Die von abstrakten Klassen implementierten spezifischen Methoden sind standardmäßig virtuell, aber die Schnittstellenmethoden in der Klasse, die die Schnittstelle implementiert, sind standardmäßig nicht virtuell. Sie können sie natürlich auch als virtuell deklarieren . (Schnittstelle) und Ähnlich wie nicht-abstrakte Klassen muss eine abstrakte Klasse auch ihre eigenen Implementierungen für alle Mitglieder der in der Basisklassenliste der Klasse aufgeführten Schnittstellen bereitstellen. Abstrakte Klassen dürfen jedoch Schnittstellenmethoden auf abstrakte Methoden abbilden.
8. Abstrakte Klassen implementieren in oop ein Prinzip, das das Veränderliche vom Unveränderlichen trennt. Abstrakte Klassen und Schnittstellen werden als unveränderlich definiert und veränderbare Sitzunterklassen werden implementiert.
9. Eine gute Schnittstellendefinition sollte spezifische und nicht multifunktionale Funktionen haben, da es sonst zu Schnittstellenverschmutzung kommt. Wenn eine Klasse nur eine Funktion dieser Schnittstelle implementiert und andere Methoden in der Schnittstelle implementieren muss, spricht man von Schnittstellenverschmutzung.
10. Versuchen Sie, die Verwendung der Vererbung zum Implementieren von Komponentenfunktionen zu vermeiden, sondern verwenden Sie die Black-Box-Wiederverwendung, dh die Objektkombination. Da die Vererbungsebene zunimmt, besteht die direkteste Konsequenz darin, dass Sie alle Klassen in den Stapel laden müssen, wenn Sie eine bestimmte Klasse in dieser Klassengruppe aufrufen! Die Konsequenzen sind vorstellbar (im Zusammenhang mit dem Stack-Prinzip verstanden). Gleichzeitig können interessierte Freunde feststellen, dass Microsoft beim Erstellen einer Klasse häufig die Objektkombinationsmethode verwendet. In asp.net verfügt die Page-Klasse beispielsweise über Attribute wie Server Request, aber tatsächlich sind sie alle Objekte einer bestimmten Klasse. Die Verwendung dieses Objekts der Page-Klasse zum Aufrufen von Methoden und Eigenschaften anderer Klassen ist ein sehr grundlegendes Entwurfsprinzip.
11. Wenn eine abstrakte Klasse eine Schnittstelle implementiert, können Sie die Methoden in der Schnittstelle als abstrakte Methoden zuordnen, ohne sie implementieren zu müssen, und die Methoden in der Schnittstelle in der Unterklasse der abstrakten Klasse implementieren 🎜>
4. Verwendung abstrakter Klassen und Schnittstellen:
1. Wenn Sie mehrere Versionen einer Komponente erstellen möchten, erstellen Sie eine abstrakte Klasse. Abstrakte Klassen bieten einfache Methoden zur Steuerung von Komponentenversionen.
2. Verwenden Sie Schnittstellen, wenn die von Ihnen erstellte Funktionalität für eine Vielzahl unterschiedlicher Objekte verwendet werden soll. Wenn Sie kleine und prägnante Funktionsblöcke entwerfen möchten, verwenden Sie Schnittstellen.
3. Wenn Sie eine große Funktionseinheit entwerfen möchten, verwenden Sie abstrakte Klassen. Wenn Sie eine gemeinsame implementierte Funktionalität für alle Implementierungen der Komponente bereitstellen möchten, verwenden Sie abstrakte Klassen.
4. Abstrakte Klassen werden hauptsächlich für eng verwandte Objekte verwendet. Schnittstellen eignen sich zur Bereitstellung gemeinsamer Funktionen für nicht verwandte Klassen.
Hier sind ein paar Metaphern, die ich online gesehen habe, sie sind wirklich gut, hehe:
1. Flugzeuge können fliegen und Vögel können fliegen. Sie erben beide die gleiche Schnittstelle „Fliegen“, aber F22 gehört zur abstrakten Klasse „Flugzeuge“ und Tauben gehören zur abstrakten Klasse „Vögel“.
2. So wie Eisentüren und Holztüren alle Türen sind (abstrakte Klasse), kann ich Ihnen nicht die gewünschte Tür geben (kann nicht instanziiert werden), aber ich kann Ihnen eine bestimmte Eisentür oder Holztür geben (Polymorphismus). ); und Es kann nur eine Tür sein, man kann nicht sagen, dass es ein Fenster ist (einfache Vererbung); eine Tür kann ein Schloss (Schnittstelle) oder eine Türklingel (mehrere Implementierungen) haben. Die Tür (abstrakte Klasse) definiert, was Sie sind, und die Schnittstelle (Schloss) legt fest, was Sie tun können (eine Schnittstelle sollte nur eine Sache tun, Sie können das Schloss nicht bitten, einen Ton zu erzeugen (Schnittstellenverschmutzung)).
Das Obige ist der Unterschied zwischen abstrakten Klassen und Schnittstellen in C#. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!