Le mot clé final en Java
Le mot-clé final en Java est un modificateur utilisé pour empêcher la modification d’un code ou d’une valeur. Il est possible d’utiliser ce mot-clé dans 3 contextes :
- Mot-clé final en tant que modificateur de variable
- Mot clé final en tant que modificateur de méthode
- Mot-clé final en tant que modificateur de classe
Chaque contexte a sa propre signification et ses restrictions implicites. Ils sont discutés en détail ci-dessous.
Mot-clé final en tant que modificateur de variable
Chaque contexte a son propre but. Le mot-clé final, lorsqu’il est utilisé avec une variable, il est spécifiquement destiné à empêcher l’utilisateur de modifier la valeur. Une variable déclarée final, une fois initialisée, sa valeur ne peut être changée.
Si la variable final vient d’être déclarée mais non initialisée, il est permis d’attribuer une valeur à une variable final une fois dans le code. Toute modification de la valeur d’une variable final entraînera une erreur de compilation.
Par exemple, le code ci-dessous affichera une erreur lors de la compilation si vous tentez de le compiler.
public class FinalStr { final String str = "Hello World!"; public FinalStr() { str = "Welcome"; //la variable str ne peut pas être modifiée } }
Mot clé final en tant que modificateur de méthode
Une méthode déclarée final ne peut être redéfinée. Ce qui signifie que même une sous-classe peut appeler la méthode final de la classe parente sans aucun problème, mais elle ne peut y redéfinir.
Par exemple, le code ci-dessous affichera une erreur lors de la compilation si vous tentez de le compiler.
class Bar{ final void display(){ System.out.println("Méthode de la classe Bar"); } } class Foo extends Bar{ void display(){ System.out.println("Méthode de la classe Foo"); } public static void main(String args[]){ Foo obj= new Foo(); obj.display(); } }
Mot-clé final en tant que modificateur de classe
Le mot clé final, lorsqu’il est utilisé par une classe en tant que modificateur, il empêche la classe d’être héritée par une autre classe. Par exemple, si vous essayez de compiler le code ci-dessous, il génère une erreur de compilation car la classe « Bar » est une classe final qui ne peut être héritée.
final class Bar{ } class Foo extends Bar{ void display(){ System.out.println("Hello World!"); } public static void main(String args[]){ Foo obj= new Foo(); obj.display(); } }
Les points à retenir:
- Un constructeur ne peut être déclaré final.
- Une variable final locale doit être initialisée pendant la déclaration.
- Toutes les variables déclarées dans une interface sont par défaut final.
- Nous ne pouvons pas changer la valeur d’une variable déclarée final.
- Une méthode final ne peut être redéfinie.
- Une classe final ne peut être héritée.
- Si les paramètres d’une méthode sont déclarés final, la valeur de ces paramètres ne peut être modifiée.