classe finale
La classe finale ne peut pas être héritée. Dans le même temps, une fois la classe modifiée avec Final, cela signifie que toutes les méthodes de la classe finale sont implicitement spécifiées comme méthodes finales.
Méthode finale
Au cours du processus d'hérédité des classes, la sous-classe ne peut pas être modifiée ou écrasée pour la méthode finale de la classe parent.
Les méthodes privées sont toutes implicitement spécifiées comme méthodes finales.
Il y a deux raisons d'utiliser la méthode finale:
variable finale
Le mot-clé final est la méthode la plus couramment utilisée pour modifier les variables. Si les variables des membres sont modifiées, elle doit être initialisée au moment de la définition ou dans le constructeur, et aucune affectation ne peut être effectuée après initialisation.
Il existe différentes significations pour les types de base et les objets de classe:
Le champ final statique est appelé constante de période de compilation et est généralement capitalisé.
Exemple
class Glyph {void Draw () {System.out.println ("Glyph.Draw ()"); } Glyph () {System.out.println ("Glyph () avant Draw ()"); dessiner(); System.out.println ("Glyph () After Draw ()"); }} classe RoundGlyph étend Glyph {private int redIus = 1; RoundGlyph (int r) {radius = r; System.out.println ("RoundGlyph.roundGlyph (), RADIUS =" + RADIUS); } void Draw () {System.out.println ("RoundGlyph.Draw (), Radius =" + Radius); }} classe publique rolyconstructors {public static void main (String [] args) {new RoundGlyph (5); }} Résultat de sortie:
Glyph () avant dessiner () rondglyph.draw (), radius = 0Glyph () après dessiner () rondglyph.roundglyph (), radius = 5
Le code ci-dessus montre le processus d'initialisation de classe et les problèmes catastrophiques cachés.
La fonction principale appelle le constructeur RoundGlyph avec le paramètre 5 pour créer un objet RoundGlyph, et le constructeur rondglyph de son glyphe de classe parent est appelé avant l'exécution du constructeur rondglyph.
Cependant, la méthode Draw est appelée dans le constructeur du glyphe de classe parent. En raison du polymorphisme, la méthode de tirage de la sous-classe est réellement appelée. Cependant, le Redius de la sous-classe n'a pas été initialisé via le constructeur pour le moment, donc la sortie est:
RoundGlyph.Draw (), Radius = 0
Ce n'est évidemment pas le résultat que nous voulons, il est donc important de noter:
La deuxième raison est que Final n'appliquera pas de polymorphisme, il peut donc être garanti que la méthode correspondante de l'objet actuel est appelée, plutôt que la méthode de remplacement de la sous-classe qui n'a pas été effectuée dans le travail d'initialisation.
Résumez la méthode d'allocation de mémoire de la finale:
1. Modifier les variables:
D'une manière générale, il y a trois endroits où les variables finales peuvent être attribuées: affectation directe, dans le constructeur ou dans le bloc d'initialisation.
(1) Initialisation:
Étant donné que la déclaration et l'initialisation sont associées à la syntaxe Java,
C'est-à-dire: si vous n'affichez pas de variable d'initialisation, le système l'initialise automatiquement avec une valeur par défaut. (Si int est 0)
Pour les variables finales, si vous n'attribuez pas de valeurs lorsqu'elle est déclarée, le système par défaut un champ vide, qui est initialisé dans le constructeur.
S'il est statique, vous pouvez initialiser le bloc.
(2) Mémoire:
Les méthodes de traitement des constantes (variables finales) et des variables non finales sont différentes.
Lorsque chaque type utilise une constante, il copiera une copie dans son propre pool constant.
Les constantes sont également stockées dans la zone de méthode comme les variables de classe (statique), mais elles sont stockées dans le pool constant.
(Probablement, les variables de classe sont partagées par toutes les instances, tandis que les pools constants sont uniques à chaque instance.)
2. Méthode de modification:
Il est enregistré dans la zone de la méthode et peut être remplacé directement par le code de fonction sans attendre l'exécution pour décider quelle fonction est spécifique.
3. Catégorie de modification:
Économisez dans la zone de la méthode.