JavaRush /Java-Blog /Random-DE /10 abstrakte Java-Interviewfragen zu Klassen und Schnitts...

10 abstrakte Java-Interviewfragen zu Klassen und Schnittstellen

Veröffentlicht in der Gruppe Random-DE
Abstrakte Klassen und Schnittstellen erfreuen sich in allen objektorientierten Programmiersprachen großer Beliebtheit. Und in fast jedem Java-Interview stößt man auf mindestens eine Frage zu diesem Thema. Schnittstellen werden aufgrund ihrer Beliebtheit bei Software-Designern häufiger erwähnt, aber auch Fragen zu abstrakten Klassen tauchen von Zeit zu Zeit auf. Letztere werden am häufigsten von Bewerbern für die Position eines Junior-Entwicklers gestellt, beispielsweise mit nicht mehr als zwei Jahren Erfahrung in der Java-Entwicklung, während Fragen zu Schnittstellen am häufigsten in Vorstellungsgesprächen mit Personen gestellt werden, deren Erfahrung bereits mehr als vier Jahre beträgt. Sie werden im Allgemeinen in Verbindung mit anderen Fragen zu Java-Entwurfsmustern gestellt, beispielsweise den Decorator- oder Factory-Mustern. 10 Java-Interviewfragen zu abstrakten Klassen und Schnittstellen - 1In diesem Artikel werden wir uns mit häufigen Fragen zu abstrakten Klassen und Schnittstellen befassen, die auf verschiedenen Ebenen von Java-Interviews gestellt wurden. Die meisten davon sollten selbst für einen unerfahrenen Java-Programmierer nicht schwierig sein. Dabei handelt es sich meist um reine Wissensfragen, aber einige davon, wie etwa die Unterschiede zwischen abstrakten Klassen und Schnittstellen in Java oder wann man eine abstrakte Klasse einer Schnittstelle vorzieht , können recht knifflig sein. Wir bieten Ihnen ein Dutzend interessante Fragen zum Thema.
Wenn Ihnen jemals in einem Interview eine Frage gestellt wurde oder Sie eine sinnvolle Frage zu abstrakten Klassen und Schnittstellen stellen mussten, diese aber nicht auf dieser Liste steht, teilen Sie sie bitte in den Kommentaren mit.

1. Kann eine abstrakte Klasse in Java Konstruktoren haben?

Ja, in einer abstrakten Klasse in Java können Sie Konstruktoren deklarieren und definieren. Da es unmöglich ist, Instanzen abstrakter Klassen zu erstellen, kann ein solcher Konstruktor nur aufgerufen werden, wenn eine Kette von Konstruktoren gebildet wird, also wenn eine Instanz einer bestimmten Implementierungsklasse erstellt wird. Aber stellen Sie sich vor, dass der Interviewer dann die Frage stellt: Was nützt ein Konstruktor, wenn man sowieso keine Instanz einer abstrakten Klasse erstellen kann? Der Punkt ist, dass es weiterhin verwendet werden kann, um die Anfangswerte allgemeiner Variablen festzulegen, die in einer abstrakten Klasse deklariert und von verschiedenen Implementierungen verwendet werden. Selbst wenn Sie keinen Konstruktor deklarieren, fügt der Compiler der abstrakten Klasse einen Standardkonstruktor ohne Argumente hinzu. Ohne sie wird Ihre Unterklasse nicht kompiliert, da die erste Anweisung in jedem Konstruktor ein impliziter Aufruf super()des Standard-Superklassenkonstruktors in Java ist.

2. Können abstrakte Klassen in Java Schnittstellen implementieren? Müssen sie alle Methoden implementieren?

Ja, abstrakte Klassen können Schnittstellen mithilfe von implementieren implements. Da sie abstrakt sind, müssen sie nicht alle Methoden implementieren. Es wird empfohlen, über eine abstrakte Basisklasse und eine Schnittstelle zum Deklarieren des Typs zu verfügen. Ein Beispiel ist eine Schnittstelle java.util.Listund die entsprechende abstrakte Klasse java.util.AbstractList. Da AbstractListalle gängigen Methoden implementiert werden, müssen bestimmte Implementierungen (z. B. LinkedListund ) nicht alle Methoden implementieren, wie dies der Fall wäre, wenn sie die Schnittstelle direkt implementieren würden. Diese Lösung kombiniert die Vorteile der Verwendung einer Schnittstelle zum Deklarieren eines Typs mit der Flexibilität einer abstrakten Klasse, um das gesamte allgemeine Verhalten an einem Ort zu implementieren. In Joshua Blochs Buch „Java. „Effektive Programmierung“ enthält ein hervorragendes Kapitel zum Thema der Verwendung von Schnittstellen und abstrakten Klassen in Java. Für ein besseres Verständnis ist es sinnvoll, es zu studieren. ArrayListList

3. Kann eine abstrakte Klasse final sein?

Nein, er kann nicht. Das Schlüsselwort finalbedeutet, dass die Klasse an der Spitze der Hierarchie steht und keine Nachkommen haben kann. Und eine abstrakte Klasse ohne Erben ist ein kugelförmiges Pferd im luftleeren Raum, da es unmöglich ist, eine Instanz zu erstellen abstract class. Wenn eine Klasse also beides ist abstract, finalhat sie keine Nachkommen und kann nicht instanziiert werden. Der Java-Compiler gibt einen Fehler aus, wenn Sie eine Klasse erstellen abstractund final.

4. Kann eine abstrakte Klasse in Java statische Methoden haben?

Ja, abstrakte Klassen können statische Methoden deklarieren und definieren. Es ist lediglich erforderlich, die allgemeinen Prinzipien zum Erstellen statischer Methoden in Java zu befolgen, da diese im objektorientierten Design unerwünscht sind, da das Überschreiben statischer Methoden in Java nicht möglich ist. Statische Methoden in einer abstrakten Klasse sind sehr selten, aber wenn es gute Gründe dafür gibt, spricht nichts dagegen, sie zu verwenden.

5. Ist es möglich, eine abstrakte Klasse zu instanziieren?

Nein, das können Sie nicht tun. Das Wesen einer abstrakten Klasse besteht darin, dass sie nicht vollständig ist und in ihren Nachkommenklassen vervollständigt werden muss. Das heißt, diese Klasse ist noch nicht einsatzbereit. Es kann beispielsweise sein, dass einige Methoden nicht implementiert sind. Da eine Klasse nicht einsatzbereit ist, kann ihr Objekt nicht erstellt werden. Sie können jedoch Instanzen von Erben einer abstrakten Klasse erstellen. Der Java-Compiler gibt einen Fehler aus, wenn ein Programm versucht, eine abstrakte Klasse zu instanziieren.

6. Ist es für eine abstrakte Klasse notwendig, abstrakte Methoden zu haben?

Nein, eine abstrakte Klasse darf keine abstrakten Methoden haben. Sie können eine Klasse in Java abstrahieren, indem Sie einfach ein Schlüsselwort abstractin ihrer Deklaration verwenden. Der Compiler erzwingt alle strukturellen Einschränkungen, z. B. dass keine Instanziierungen dieser Klasse erstellt werden dürfen. Kontrovers ist übrigens die Frage, ob es in einer abstrakten Klasse oder Schnittstelle abstrakte Methoden geben soll. Mir scheint, dass eine abstrakte Klasse abstrakte Methoden haben sollte, da dies das Erste ist, woran ein Programmierer denkt, wenn er eine abstrakte Klasse sieht. Das passt gut zum Prinzip der Minimierung von Überraschungen.

7. Was sind die Unterschiede zwischen einer abstrakten Klasse und einer Schnittstelle in Java?

Dies ist die wichtigste und eine der klassischsten Java-Interviewfragen. Ich kann nicht zählen, wie oft ich diese Frage in Java-Interviews auf allen Ebenen gesehen habe. Das Interessante an dieser Fragestellung ist insbesondere die Möglichkeit für den Antragsteller, ein Beispiel anzugeben. Fragen zu den Grundlagen der objektorientierten Programmierung, wie Abstraktion, Kapselung, Polymorphismus und Vererbung, zu beantworten, ist einfach, aber wenn es um solch subtile Nuancen geht, sind Bewerber oft verwirrt und sagen das Erste, was ihnen in den Sinn kommt. Die Antwort auf diese Frage verdient einen eigenen Artikel (insbesondere nach Änderungen in Java 8), jedoch kurz gesagt:
  • Eine Schnittstelle beschreibt nur das Verhalten (Methoden) eines Objekts, verfügt jedoch über keine Zustände (Felder) (außer public static final), während eine abstrakte Klasse diese haben kann.

  • Eine abstrakte Klasse wird geerbt (erweitert) und eine Schnittstelle wird implementiert (implementiert). Wir können nur eine Klasse erben, aber beliebig viele Schnittstellen implementieren. Eine Schnittstelle kann eine andere Schnittstelle bzw. andere Schnittstellen erweitern.

  • Abstrakte Klassen werden verwendet, wenn eine „Ist-ein“-Beziehung besteht, das heißt, die Unterklasse erweitert die abstrakte Basisklasse und Schnittstellen können von verschiedenen Klassen implementiert werden, die überhaupt nicht miteinander verwandt sind.

8. Wann ist es sinnvoll, eine abstrakte Klasse einer Schnittstelle vorzuziehen und umgekehrt?

Dies ist eine Fortsetzung früherer Fragen zu abstrakten Klassen und Schnittstellen. Wenn Sie die syntaktischen Unterschiede kennen, wird Ihnen die Beantwortung dieser Frage keine Probleme bereiten, da sie ausschlaggebend für die Entscheidungsfindung sind. Da es nahezu unmöglich ist, einer veröffentlichten Schnittstelle eine neue Methode hinzuzufügen, ist es bei potenziellem Weiterentwicklungsbedarf besser, eine abstrakte Klasse zu verwenden. Die Entwicklung abstrakter Klassen in Java ist einfacher als die Entwicklung von Schnittstellen. Ebenso ist es besser, eine abstrakte Klasse für die Standardimplementierung zu erstellen, wenn eine Schnittstelle zu viele Methoden hat und die Implementierung aller Methoden zu einem echten Problem wird. Dieses Muster wird im Java-Collections-Paket befolgt, die abstrakte Klasse AbstractListstellt die Standardimplementierung für die List. Verwenden Sie abstrakte Klassen, wenn:
  • Sie möchten Code zwischen mehreren eng verwandten Klassen teilen.

  • Sie erwarten, dass Klassen, die Ihre abstrakte Klasse erweitern, viele Methoden oder Felder gemeinsam haben oder andere Zugriffsmodifikatoren als public(z. B. protectedund private) erfordern.

  • Sie möchten nichtstatische Felder oder не-finalFelder deklarieren. Auf diese Weise können Sie Methoden definieren, die auf das Objekt, zu dem sie gehören, zugreifen und dessen Status ändern können.
Verwenden Sie Schnittstellen, wenn:
  • Sie erwarten, dass nicht verwandte Klassen Ihre Schnittstelle implementieren. Beispielsweise werden Schnittstellen Comparableund Cloneablevon vielen unabhängigen Klassen implementiert.

  • Sie möchten das Verhalten eines bestimmten Datentyps definieren, aber es ist Ihnen egal, wer ihn implementiert.

  • Sie möchten die Vererbung mehrerer Typen verwenden.

9. Was ist eine abstrakte Methode in Java?

Eine abstrakte Methode ist eine Methode ohne Körper. Sie deklarieren einfach eine Methode, ohne sie zu definieren, indem Sie ein Schlüsselwort abstractin der Methodendeklaration verwenden. Alle innerhalb einer Schnittstelle in der Java-Sprache deklarierten Methoden sind standardmäßig abstrakt. Hier ist ein Beispiel für eine abstrakte Methode in Java:
public void abstract printVersion();
Um diese Methode zu implementieren, müssen Sie nun die abstrakte Klasse erweitern und diese Methode überschreiben.

10. Kann eine abstrakte Klasse in Java eine Methode enthalten main?

Ja, eine abstrakte Klasse in Java kann eine Methode enthalten main, da es sich nur um eine weitere statische Methode handelt, und eine abstrakte Klasse kann mit der Methode ausgeführt werden main, solange Sie sie nicht instanziieren. Das ist alles, was ich dir sagen wollte. Und denken Sie daran: Abstrakte Klassen und Schnittstellen sind wichtige Designentscheidungen im objektorientierten Analyse- und Designprozess und sollten natürlich mit der gebotenen Vorsicht verwendet werden, wenn Sie ein flexibles System erstellen möchten.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION