Diese interessante und wichtige Frage wurde einem meiner Leser während eines Telefoninterviews für eine Stelle als Java-Entwickler gestellt. Obwohl er wusste, dass es unmöglich war, eine abstrakte Klasse
in der Java-Sprache zu erstellenfinal
, verwirrte ihn die Formulierung der Frage. Die Antwort ist einfach: Nein,
final
eine -Klasse kann keine abstrakten Methoden enthalten. Warum? Denn sobald Sie eine abstrakte Methode in einer Java-Sprachklasse deklarieren, wird diese Klasse automatisch abstrakt und
final
Sie können keine abstrakte Klasse in der Java-Sprache erstellen.
final
Das bedeutet, dass es in einer Java-Klasse keine abstrakten Methoden geben kann.
Viele Java-Entwickler sind bei der Beantwortung dieser Frage aufgrund der Formulierung verwirrt. Selbst wenn die Person, die die Frage stellt, mit dem allgemeinen Konzept vertraut ist, erkennt sie möglicherweise nicht, dass eine Klasse nach der Deklaration einer abstrakten Methode darin abstrakt wird und Sie in Java keine abstrakte Klasse erstellen können
final
. Dieser Punkt unterscheidet diese Frage von der häufiger gestellten Frage:
Ist es in Java möglich, eine Klasse gleichzeitig als abstrakt und endgültig zu deklarieren? Schauen wir uns einen Beispielcode an, um zu zeigen, dass
final
es nicht möglich ist, eine abstrakte Methode in einer -Klasse zu deklarieren. Lassen Sie
Hello.java
uns
public final
eine Klasse namens haben
Hello
, die eine abstrakte Methode hat
print()
.
public final class Hello {
public abstract void print();
}
Geben Sie diesen Code in die IDE ein. Sie erhalten die folgende Fehlermeldung: Sie besagt, dass
Hello
es sich um eine abstrakte Klasse handeln muss, damit abstrakte Methoden darin deklariert werden können.
Das Gleiche passiert, wenn Sie diesen Code in Notepad eingeben und ihn mit dem Dienstprogramm javac über die Befehlszeile kompilieren. Gemäß den Java-Spezifikationen wird diese Klasse zu einer abstrakten Klasse, sobald Sie eine abstrakte Methode innerhalb einer Klasse deklarieren, und da Sie
final
in Java keine abstrakte Klasse erstellen können, generiert der Compiler einen Fehler. Dies gilt sowohl für Klassen der obersten Ebene als auch für verschachtelte Klassen in der Java-Sprache. Selbst wenn Sie eine abstrakte Methode in einer verschachtelten Klasse deklarieren
final
, ist der Fehler derselbe. Eine weitere verwandte Frage ist:
Kann eine abstrakte Klasse in Java statische Methoden haben? Antwort: Ja, das ist möglich. Es ist kein Problem, eine statische Methode in einer abstrakten Klasse zu deklarieren, da Sie für die Verwendung einer statischen Methode keine Instanz der Klasse erstellen müssen. Sie können sie einfach über den Klassennamen aufrufen.
Hello
Wir können unser Beispiel ändern, um eine Methode in die Klasse aufzunehmen
main()
, die in Java statisch ist, wie unten gezeigt:
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
}
}
Wie Sie sehen, wird kein Kompilierungsfehler ausgegeben. Dieser Code lässt sich problemlos kompilieren, da Sie in Java völlig sicher eine statische Methode in einer abstrakten Klasse deklarieren können.
Kurze Schlussfolgerungen Es ist unmöglich, eine abstrakte Methode in einer
final
-Klasse zu deklarieren. Denn sobald Sie dies tun, wird die Klasse gemäß den Java-Spezifikationen automatisch abstrakt. Und da
final
eine -Klasse in Java nicht abstrakt sein kann, ist dies inakzeptabel und der Compiler wird Ihnen dies verbieten, indem er einen Fehler ausgibt. Aber Sie können statische Methoden sowohl in finalen als auch in abstrakten Klassen deklarieren, dabei gibt es keine Probleme.
GO TO FULL VERSION