letzte Klasse
Die letzte Klasse kann nicht vererbt werden. Gleichzeitig bedeutet dies, dass alle Methoden in der endgültigen Klasse implizit als endgültige Methoden angegeben sind, sobald die Klasse mit endgültigem Modus geändert wurde.
Letzte Methode
Während des Erbritters des Unterrichts kann die Unterklasse für die endgültige Methode in der übergeordneten Klasse nicht geändert oder überschrieben werden.
Die privaten Methoden sind alle implizit als endgültige Methoden angegeben.
Es gibt zwei Gründe, die endgültige Methode zu verwenden:
endgültige Variable
Das endgültige Schlüsselwort ist die am häufigsten verwendete Methode zum Ändern von Variablen. Wenn Mitgliedsvariablen geändert werden, muss sie zum Zeitpunkt der Definition oder im Konstruktor initialisiert werden, und nach der Initialisierung kann keine Zuordnung erfolgen.
Es gibt verschiedene Bedeutungen für Grundtypen und Klassenobjekte:
Das statische Endfeld wird als Konstante als Kompilierteriode bezeichnet und im Allgemeinen aktiviert.
Beispiel
Klasse Glyphe {void Draw () {System.out.println ("Glyph.draw ()"); } Glyphen () {System.out.println ("Glyph () vor Draw ()"); ziehen(); System.out.println ("Glyph () nach Draw ()"); }} Klasse RoundGlyphe erweitert die Glyphe {private int Redius = 1; RoundGlyphe (int r) {radius = r; System.out.println ("RoundGlyph.RoundGlyph (), Radius =" + Radius); } void Draw () {System.out.println ("Roundglyph.draw (), radius =" + radius); }} public class rolyConstructors {public static void main (String [] args) {New RoundGlyph (5); }} Ausgangsergebnis:
Glyphe () vor Draw () RoundGlyph.Draw (), Radius = 0Glyphe () nach Draw () RoundGlyph.RoundGlyphe (), Radius = 5
Der obige Code zeigt den Klasseninitialisierungsprozess und versteckte katastrophale Probleme.
Die Hauptfunktion ruft mit Parameter 5 einen Rundgryphenkonstruktor auf, um ein Rundglyphenobjekt zu erstellen, und der Rundgryphenkonstruktor seiner übergeordneten Klassenglyphen wird vor dem Rundglyphenkonstruktor aufgerufen.
Die Zeichnungsmethode wird jedoch im Konstruktor der übergeordneten Klassenglyphen aufgerufen. Aufgrund des Polymorphismus wird die Ziehmethode der Unterklasse tatsächlich aufgerufen. Der Redius der Unterklasse wurde jedoch zu diesem Zeitpunkt nicht durch den Konstruktor initialisiert, sodass der Ausgang:
Rundgryphe.draw (), radius = 0
Dies ist offensichtlich nicht das Ergebnis, das wir wollen, daher ist es wichtig zu beachten:
Der zweite Grund ist, dass das endgültige Polymorphismus nicht anwendet. Es kann garantiert werden, dass die entsprechende Methode des aktuellen Objekts eher aufgerufen wird als die Überschreibungsmethode der Unterklasse, die in der Initialisierungsarbeit nicht durchgeführt wurde.
Fassen Sie die Speicherzuweisungsmethode der endgültigen Fassung zusammen:
1. Variablen ändern:
Im Allgemeinen gibt es drei Orte, an denen endgültige Variablen zugewiesen werden können: direkte Zuordnung, im Konstruktor oder im Initialisierungsblock.
(1) Initialisierung:
Da Deklaration und Initialisierung mit der Java -Syntax verbunden sind, sind
Das heißt: Wenn Sie keine Initialisierungsvariable anzeigen, initialisiert das System sie automatisch mit einem Standardwert. (Wenn int 0 ist)
Bei endgültigen Variablen, wenn Sie bei der Deklaration keine Werte zuweisen, stand das System standardmäßig ein leeres Feld, das im Konstruktor initialisiert wird.
Wenn es statisch ist, können Sie den Block initialisieren.
(2) Speicher:
Die Verarbeitungsmethoden von Konstanten (endgültige Variablen) und Nicht-Finale-Variablen sind unterschiedlich.
Wenn jeder Typ eine Konstante verwendet, kopiert er eine Kopie in seinen eigenen konstanten Pool.
Konstanten werden auch im Methodenbereich wie Klassenvariablen (statisch) gespeichert, aber sie werden im konstanten Pool gespeichert.
(Wahrscheinlich werden Klassenvariablen von allen Fällen geteilt, während konstante Pools für jede Instanz nur eindeutig sind.)
2. Modifikationsmethode:
Es wird im Methodenbereich gespeichert und kann direkt durch den Funktionscode ersetzt werden, ohne bis zur Ausführung zu warten, um zu entscheiden, welche Funktion spezifisch ist.
3. Modifikationskategorie:
Speichern im Methodenbereich.