Maison  >  Article  >  Java  >  Mot-clé final en Java

Mot-clé final en Java

WBOY
WBOYoriginal
2024-08-30 15:22:49604parcourir

Dans cet article, nous allons examiner les différents mots-clés finaux pour Java. C'est un mot-clé utilisé en langage Java pour appliquer des restrictions sur son utilisation ou sa modification par d'autres classes ou variables. En utilisant ce mot-clé, on indique à l'interpréteur de n'autoriser aucune modification future de cette variable ou méthode et de la traiter comme une constante. Il peut être utilisé avec les 3 scénarios ci-dessous :-

PUBLICITÉ Cours populaire dans cette catégorie MODÉLISATION ET VALORISATION FINANCIÈRE - Spécialisation | 51 Série de cours | 30 tests simulés

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

  1. Variable : Déclarer une variable comme finale restreint sa modification à faire référence à toute autre valeur ou référence.
  2. Méthodes : La déclaration d'une méthode comme finale restreint le remplacement de cette méthode dans les classes enfants.
  3. Classes : Déclarer une classe comme finale empêche l'héritage de cette classe.

Selon les bonnes pratiques de codage, il est toujours recommandé de déclarer ces mots-clés en majuscules.

Syntaxe du mot-clé final en Java

Ce mot-clé peut être utilisé des 3 manières ci-dessous :-

1. Variable

Les variables en Java peuvent être déclarées comme variables pour limiter toute modification de leurs valeurs. Il peut être déclaré de l'une des trois manières ci-dessous :

Syntaxe :

final int VAR1=21;//final variable
final int VAR2; //blank final variable
static final double DUMMY= 45.504;//final static variable
static final double PK;//blank final static variable
Remarque-  Les variables de référence peuvent également être déclarées statiques afin qu'elles ne puissent pas contenir de référence à un autre objet. Mais en raison de la nature interne de l’objet, la référence peut être modifiée.

final String builder sb= new StringBuilder(“LetsLearn”);

2. Méthodes

La méthode déclarée avec le mot-clé final est dite la méthode finale. La méthode finale ne peut pas être remplacée par sa classe enfant, ce qui signifie que la méthode de la classe enfant ne peut pas modifier la définition de la méthode finale présente dans la classe parent. Lorsque nous voulons que l'implémentation d'une méthode définie dans la classe parent soit suivie dans toutes les classes enfants, nous devons déclarer cette méthode comme finale.

Syntaxe :

final int my1(){
//method defination
}

3. Cours

Les mots-clés finaux peuvent également être utilisés avec des classes pour en faire une classe finale, ce qui signifie qu'une classe particulière ne peut pas être étendue ou héritée par d'autres classes.

Syntaxe :

final class myClass{
/member variables and member functions.
}

Comment fonctionne le mot-clé final en Java ?

Le mot-clé final permet de restreindre le remplacement des classes, des membres ou des variables lors de l'héritage.

1. Variables finales

Déclarer une variable comme finale signifie restreindre toute modification à la valeur de la variable dans les classes héritées. Une variable finale ne peut être initialisée qu'une seule fois et doit être utilisée telle quelle ; il faut donc initialiser une variable finale. Il est principalement utilisé avec static pour créer une variable de classe constante.

Par exemple :

final int a =0;

Nous pouvons également déclarer les variables de référence finales ; dans ce cas, une variable de référence ne peut pas faire référence à différents objets. Mais en Java, l'état interne d'un objet peut être modifié ; la variable de référence finale fait référence à cela. Ainsi, nous pouvons apporter des modifications à la valeur de la variable de référence. Cela revient à utiliser les tableaux finaux comme indiqué ci-dessous :-

Code :

class MyClass
{
public static void main(String args[])
{
final int myarr[] = {1, 2, 3, 4, 5};
for (int q = 0; q < myarr.length; q++)
{
myarr [q] = myarr [q]*10;
System.out.println(myarr [q]);
}
}
}

Sortie :

Mot-clé final en Java

Explication

Ici, le tableau a1 fait référence au même objet ; seule la valeur de cet objet change car nous savons tous que la variable arrays contient uniquement l'adresse de départ de l'emplacement mémoire où ces éléments du tableau sont stockés.

Et de la même manière, si nous essayons de faire référence à un tableau différent en utilisant la même variable de tableau a1, alors le compilateur générera une erreur. Ainsi, utiliser ici le tableau final de mot signifie que toute modification peut être apportée au membre du tableau, mais la variable n'est pas autorisée à faire référence à un autre objet.

Choses à retenir

L'initialisation d'une variable finale est nécessaire pour éviter les erreurs de compilation. Il existe une différence entre les variables const C++ et ces variables finales : les variables const n'ont pas besoin d'être initialisées. Il existe trois façons d'initialiser une variable finale-

  • Initialize at the time of declaration itself: We can easily declare a final variable at the time of declaring it. In case it is not initialized, then that variable is considered a blank final variable, and either of the next 2 ways can help us initialize a blank final variable.
  • Using instance-initializer block: Inside this block or the constructor, a blank final variable can be easily initialized. While using a constructor to initialize, always remember to initialize the particular variable in all the available constructors.
  • Static Block: One can also use a static block to initialize the blank final variable. Static block is always triggered once for each class; thus, the variable value whose values are not meant to be altered can easily be initialized using this block.

Thus, the final keyword is used for those variables that need not change their value during the program’s execution. All the final variables created inside a method or block must be initialized there itself. Such type of variables is known as local final variables.

Explanation

In the below example, a variable I has been declared within the main function and initialised is considered a final local variable.

Code:

class myClass
{
public static void main(String args[])
{
// local final variable
final int i;
i = 20;
System.out.println(i);
}
}

Output:

Mot-clé final en Java

2. Final Methods

A method declared as final can not be overridden in any of the subclasses, thus called a final method. The method needs to be declared as final if we require that the child classes follow the class’s same implementation.

Note- Final methods don’t need to be declared in the initial stage of inheritance(base class ). The method can be declared final in any subclass that we want further subclasses to follow the same definition.

Code:

class A{
void myMethod(){
//method definition
}
}
class B extends A{
final void  myMethod(){
//overrides the method in parent class
//runs successfully
}
}
class C extends B{
void  myMethod(){
//will throw error
}
}

3. Final Classes

Classes declared as final can not be inherited by any other classes. Mentioning a  final keyword before the class name tells the compiler that this class’s definition can only be used as they are. No other classes can add their specifications to this definition or reuse its code. If one attempts to extend the final class, an error is thrown by the compiler indicating that this class is not meant to be extended. One can use final keywords in java in any for below 2 purposes:-

  1. The first is to prevent the inheritance of that class. E.g., all the Wrapper classes present java.lang package is final classes; therefore, we cannot extend them in our classes but can use it by declaring their objects. Any attempt to access those classes will result in an error by the compiler.
final class myParentClass
{
// member variables and member functions
}
// illegal extend.
class myChildClass extends parentClass
{
// <--COMPILE-ERROR—> Can't subclass A
}
  1. The second use of final with classes is when one needs to create an immutable class, i.e. once the class’s object is created, we cannot change its content like the predefined String class. The class must be declared as final to make it immutable.

Note-

  • If a class is declared as final, then its member variables and member functions are also considered final by the compiler.
  • A class cannot be declared abstract where it depends on the child classes to complete its definition and final, which prevents the inheritance itself.

Examples of Final Keywords in Java

Below is the Different Example of Final Keyword in Java are:

1. Using Final Variable

In the below example, different variables are initialized using various methods. For example- the SECOND variable is initialized using a constructor, whereas THIRD is initialized using an initializer.

Code:

class myClass
{
final int FIRST = 5;
// a blank final variable
final int SECOND;
// another blank final variable
final int  THIRD;
FIRST =10; //illegal attempt to change the value of final variable
// a final static variable PI
// direct initialize
static final double MINVALUE = 3.141592653589793;
// a  blank final static  variable
static final double MAXRANGE;
{
THIRD = 25; // initializer block
}
static{
MAXRANGE = 200.3;
}
public myClass()
{
SECOND = -1;//needs to be initialised in every constructor
}
}

Output:

Mot-clé final en Java

2. Using Final Methods

In the below example, abstract class myShape declares final methods getWidth and get eight those need not be overridden by the inherited classes. It also declares one abstract function whose implementation is mandatory in the subsequent classes. Thus the only the definition of an abstract function is implemented in a first child class and a second child class.

Code:

abstract class myShape
{
private double width;
private double height;
public myShape(double width, double height)
{
this.width = width;
this.height = height;
}
public final double getWidth() //override not allowed
{
return width;
}
public final double getHeight() //override not allowed
{
return height;
}
abstract double getArea(); //needs to be defined in the child class
}
class firstChildClass extends myShape
{
public firstChildClass(double width, double height)
{
super(width, height);
}
final double getArea()
{
return this.getHeight() * this.getWidth();
}
}
class secondChildClass extends myShape
{
public secondChildClass(double side)
{
super(side, side);
}
final double getArea()
{
return this.getHeight() * this.getWidth();
}
}
public class myClass
{
public static void main(String[] args)
{
myShape s1 = new firstChildClass(10, 20);
myShape s2 = new secondChildClass(10);
System.out.println("width of s1 : "+ s1.getWidth());
System.out.println("height of s1 : "+ s1.getHeight());
System.out.println("width of s2 : "+ s2.getWidth());
System.out.println("height of s2 : "+ s2.getHeight());
System.out.println("area of s1 : "+ s1.getArea());
System.out.println("area of s2 : "+ s2.getArea());
}
}

Output:

Mot-clé final en Java

3. Using Final Classes

In the below program, we are using a final class Solid that defines a method to calculate the volume of a shape using its dimensions, but displaying the volume of a box is done using the inherited class’s printVol function. Shape As Solid is a final class; thus, class Shape will not be allowed to extend(or inherit) it. Thus, it uses Shape’s object to calculate the volume of any of Shape by just passing the arguments to the functions.

Code:

final class Solid {
public double getVol(double length, double width, double height) {
return length * width * height;
}
}
class Shape {
private float length;
private float width;
private float height;
Shape(float length, float width, float height) {
this.length = length;
this.width = width;
this.height = height;
}
public void printVol(Solid bObj) {
double volume = bObj.getVol(this.length, this.width, this.height);
System.out.println("Volume of the Shape: " + volume);
}
}
public class myClass {
public static void main(String[] args) {
Solid bObj = new Solid();
Shape obj = new Shape(5, 4, 3);
obj.printVol(bObj);
}
}

Output: 

Mot-clé final en Java

Conclusion

The final keyword is used to prevent the classes, variables, and methods to be overridden by its child classes. It can also be used to make classes immutable that is restricting the change in the value of their objects. The final keyword check is always checked at the compile time only. It is a great utility to prevent the reuse of the defined variables, logic, and classes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Mot-clé protégé en JavaArticle suivant:Mot-clé protégé en Java