Video: Abstrakte Klassen in Java - Wieso, weshalb und warum? 2024
Sowohl Schnittstellen als auch abstrakte Klassen haben abstrakte Methoden in Java. Aber die abstrakten Methoden spielen bei diesen beiden Arten von Referenztypen leicht unterschiedliche Rollen. Wie kannst du alles im Kopf behalten?
Das erste, was zu tun ist, ist, sich daran zu erinnern, dass niemand über objektorientierte Programmierkonzepte lernt, ohne viel Übung beim Schreiben von Code zu bekommen. Wenn Sie verwirrt sind, kann das eine gute Sache sein. Es bedeutet, dass du genug verstanden hast, um zu wissen, wie kompliziert dieses Zeug ist. Je mehr Code Sie schreiben, desto komfortabler werden Sie mit Klassen, Schnittstellen und all diesen anderen Ideen.
Als nächstes müssen Sie die Unterschiede in der Art und Weise, wie Sie abstrakte Methoden deklarieren, aussortieren. Hier ist die Geschichte.
In einer gewöhnlichen (nicht abstrakten) Klasse | In einer Schnittstelle | In einer abstrakten Klasse | |
Sind abstrakte Methoden zulässig? | Nein | Ja | Ja |
Kann eine Methodendeklaration das Schlüsselwort abstract enthalten? | Nein | Ja | Ja |
Kann eine Methodendeklaration das Schlüsselwort default enthalten (was "nicht abstrakt" bedeutet)? | Nein | Ja | Nein |
Ohne weder das Abstract noch das default | Nicht abstrakt | Abstrakt | Nicht abstrakt |
Sowohl Schnittstellen als auch abstrakte Klassen haben abstrakte Methoden. Sie fragen sich vielleicht, wie Sie zwischen der Deklaration einer Schnittstelle und der Deklaration einer abstrakten Klasse wählen sollten. In der Tat könnten Sie drei professionelle Programmierer fragen, wie sich Schnittstellen und abstrakte Klassen voneinander unterscheiden. Wenn Sie dies tun, können Sie fünf verschiedene Antworten erhalten. (Ja, fünf Antworten, nicht drei Antworten.)
Interfaces und abstrakte Klassen sind ähnliche Bestien, und die neuen Features in Java 8 haben sie noch ähnlicher gemacht als in früheren Java-Versionen. Aber die grundlegende Idee ist über die Beziehungen zwischen den Dingen.
- Das Erweitern einer Unterklasse entspricht einer Beziehung. Das Implementieren einer Schnittstelle repräsentiert eine
- can do -Beziehung. Wenn Sie einen konkreteren Beweis für den Unterschied zwischen einer Schnittstelle und einer abstrakten Klasse benötigen, sollten Sie Folgendes berücksichtigen: Eine Klasse kann viele Schnittstellen implementieren, aber eine Klasse kann nur eine andere Klasse erweitern, auch wenn diese eine Klasse eine abstrakte Klasse ist. Nachdem Sie also
als öffentliche Klasse deklariert haben, verlängert Dog House HousePet
, und Sie können
Dog
nicht zusätzlich zu einer Klasse
Friend
erweitern. Aber Sie können
Dog
veranlassen, eine
Befriendable
-Schnittstelle zu implementieren. Und dann können Sie dieselbe
Dog
Klasse eine
Trainable
Schnittstelle implementieren.
Und wenn Sie einen noch deutlichen
mehr greifbaren Unterschied zwischen einer Schnittstelle und einer abstrakten Klasse haben wollen, ist hier eins für Sie: Eine Schnittstelle darf keine nicht-statischen, nicht finalen Felder enthalten. Also dort. Schnittstellen und abstrakte Klassen unterscheiden sich voneinander. Aber wenn Sie neu im Spiel sind, sollten Sie sich über den Unterschied keine Sorgen machen. Lesen Sie einfach so viel Code wie möglich und haben Sie keine Angst, wenn Sie eine abstrakte Methode sehen. Das ist alles dazu.