Java: Final Variablen in abstrakten Klassen
In Java, ich kann nicht erstellen Sie Instanzen der abstrakten Klassen. Warum nicht eclipse Schrei über den folgenden code?
public abstract class FooType {
private final int myvar;
public FooType() {
myvar = 1;
}
}
- warum meinst du, es sollte "scream" auf den ersten Platz?
- rote Linien, unterhalb der kritischen Stelle (die Zuweisung in den Konstruktor, Konstruktor oder selbst)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der code ist in Ordnung, die Letzte variable ist initialisiert im Konstruktor von
FooType
.Sie können nicht instanziieren
FooType
werden, denn es ist Abstrakt. Aber wenn Sie eine nicht-abstrakte Unterklasse vonFooType
, wird der Konstruktor aufgerufen wird.Wenn Sie nicht über einen expliziten Aufruf
super(...)
in einem Konstruktor der Java-Compiler automatisch Hinzugefügt. Somit ist sichergestellt, dass ein Konstruktor jeder Klasse, in der Vererbungskette aufgerufen wird.Können Sie Konstruktoren, Methoden, Eigenschaften, alles, was in der abstrakten Klassen, die Sie haben können, in nicht-abstrakten Klassen als auch. Sie können einfach nicht die Klasse instanziieren. Also es ist nichts falsch mit diesem code.
In eine abgeleitete Klasse kann man den Konstruktor aufrufen, und legen Sie die Letzte Eigenschaft:
wenn Sie nicht geben Sie einen Aufruf von super(), wird es eingefügt werden sowieso vom compiler.
Können Sie erstellen, die konkreten Unterklassen von FooType und Sie alle haben eine Letzte Feld namens myvar.
BTW: EIN
public
Konstruktor in einer abstrakten Klasse ist das gleiche wie einprotected
einer, wie es kann nur aufgerufen werden, von einer sub-Klasse.Was ist Ihre Frage?
Ok. Sehen, eine abstrakte Klasse kann einen Konstruktor. Es ist immer da-implizite oder explizite. In der Tat, wenn Sie erstellen ein Objekt einer Unterklasse einer abstrakten Klasse, die erste Sache, die der Konstruktor der Unterklasse ruft den Konstruktor der abstrakten Oberklasse mittels super(). Es wird nur verstanden, das ist, warum Sie nicht schreiben
super()
ausdrücklich, es sei denn, Sie verwenden parametrisierte Konstruktoren. Jede Klasse, auch wenn es Abstrakt ist, hat eine implizite Konstruktor die Sie nicht sehen können. Es heißt, es sei denn, Sie erstellen einige Konstruktor Ihre eigenen. so lange Sie erstellt abstrakte Klassen ohne erstellen eines benutzerdefinierten Konstruktor, so dass Sie nicht wissen, über die Existenz des impliziten Konstruktor.Nein, Sie können nicht erklären, final-Variablen innerhalb einer Abstrakten Klasse.
Prüfen Sie die Unten stehende Beispiel.
Dieser code läuft korrekt und Ausgabe als
Aber wenn wir den Kommentar entfernen symbol der
wird es produzieren Fehler.