JavaRush /Java-Blog /Random-DE /Frage und Antwort: Ist es möglich, abstrakte Methoden in ...

Frage und Antwort: Ist es möglich, abstrakte Methoden in einer Abschlussklasse zu definieren?

Veröffentlicht in der Gruppe Random-DE
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, finaleine -Klasse kann keine abstrakten Methoden enthalten. Warum? Denn sobald Sie eine abstrakte Methode in einer Java-Sprachklasse deklarieren, wird diese Klasse automatisch abstrakt und finalSie können keine abstrakte Klasse in der Java-Sprache erstellen. finalDas bedeutet, dass es in einer Java-Klasse keine abstrakten Methoden geben kann.
Frage und Antwort: Ist es möglich, abstrakte Methoden in einer Abschlussklasse zu definieren?  - 1
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 finales nicht möglich ist, eine abstrakte Methode in einer -Klasse zu deklarieren. Lassen Sie Hello.javauns public finaleine 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 Helloes sich um eine abstrakte Klasse handeln muss, damit abstrakte Methoden darin deklariert werden können.
Frage und Antwort: Ist es möglich, abstrakte Methoden in einer Abschlussklasse zu definieren?  - 2
Frage und Antwort: Ist es möglich, abstrakte Methoden in einer Abschlussklasse zu definieren?  - 3
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 finalin 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. HelloWir 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ой-то Code
  }
}
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 finaleine -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.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION