static vs final java, les deux sont des modificateurs d’accès connus en Java faisant différentes fonctionnalités (utilisés pour différents travaux).
- static : le mot-clé static peut être appliqué aux variables et méthodes d’instance mais pas aux classes. Lorsqu’il est appliqué, les variables et les méthodes peuvent être appelées sans l’aide d’un objet. Lorsqu’une méthode ou une variable est appelée sans objet, l’encapsulation n’est pas maintenue. Autrement dit, avec les variables et les méthodes statiques, l’encapsulation n’existe pas.
- final : le mot clé final peut être appliqué à toutes les constructions – variables, méthodes et classes. Lorsqu’il est appliqué, final se comporte très différemment avec chacun avec des fonctionnalités différentes.
Explorons static vs final java de manière programmatique.
I) Utilisation du mot-clé static
Généralement, une variable ou une méthode d’instance nécessite un objet pour appeler avec. Mais les variables et méthodes statiques ne nécessitent pas d’objet. Observez, le code suivant.
public class Employee{ int age = 45; // non-static variable static double salary = 8877.66; // static variable public static void display() // static method { System.out.println("Hello World"); } public static void main(String args) { // System.out.println(age); // raises error, it is non-static and requires object System.out.println(salary); // works fine as salary is static, object not required display(); // works fine as display() is static, object not required }}
Dans le code ci-dessus, age est non statique et nécessite un objet pour appeler avec. Observez, la méthode main(). salaire étant statique ne nécessite pas un objet. De même pour la méthode statique display(). Il est appelé wihtout le besoin d’un objet.
II) Utilisation du mot-clé final
Comme indiqué précédemment, le mot-clé final peut être appliqué à trois endroits – variables, méthodes et classes. Lorsqu’il est appliqué, il se comporte différemment.
- Une variable finale ne peut être réaffectée.
- Une méthode finale ne peut être surchargée.
- Une classe finale ne peut être héritée.
Mais on peut trouver une chose en commun parmi les trois ci-dessus, « final signifie que quelque chose ne peut pas être fait ».
a) final avec les variables
Une variable finale fonctionne comme une constante de C/C++. C’est-à-dire qu’une variable finale ne peut pas être réaffectée. Java ne supporte pas le mot clé const et sa place utilise le mot clé final.
public class Bank{ public static void main(String args) { int rupees = 500; // non-final can be reassigned System.out.println("rupees before reassigned: " + rupees); rupees = 600; // non-final System.out.println("rupees after reassigned: " + rupees); final double $rate = 61.5; // final cannot be reassigned System.out.println("$ Rate is Rs." + $rate); // $rate = 62.8; // raises error }}
La variable roupies n’est pas finale et de ce fait réassignée avec une nouvelle valeur de 600. $rate est final et ne peut donc pas être réaffecté.
b) final avec les méthodes
Si la super classe ne permet pas à la sous-classe de surcharger, elle déclare simplement la méthode comme finale. Les méthodes finales de la super classe ne peuvent pas être surchargées par la sous-classe.
class Manager{ public final void doSomeThing() // observe final { System.out.println("Do it right now"); }}public class Worker extends Manager{ public static void main(String args) { Worker w1 = new Worker(); w1.doSomeThing(); }}
Dans la super classe Manager, doSomeThing() est déclaré final. La sous-classe Worker n’est pas autorisée à la surcharger. Essayez une fois, cela soulève une erreur de compilation. Si la super classe ont des méthodes non finales (non montrées dans le code), la sous-classe peut se sentir libre de surcharger à sa convenance.
c) final avec les classes
Le programmeur peut ne pas aimer qu’une classe soit héritée par d’autres classes car il voudrait permettre l’accessibilité par composition et non par héritage.
final class Fruit // observe, final class{ String nature = "Seedless";}public class Mango // extends Fruit raises compilation error{ public static void main(String args) { Fruit f1 = new Fruit(); System.out.println("Fruit type is " + f1.nature); }}
Dans le code ci-dessus, Fruit est déclaré comme final et ainsi Mango ne peut pas l’étendre. Alors comment peut-il faire usage des méthodes de la classe Fruit ? Tout simplement en créant un objet de Fruit et en appelant les méthodes de la classe Fruit. Ceci est connu sous le nom de composition.
Qu’est-ce que la composition en Java?
Créer un objet d’une autre classe dans notre classe et appeler les variables et les méthodes d’une autre classe est connu sous le nom de composition (connu sous le nom de relation has-a comme une classe « a » un objet d’une autre classe). Ici, l’objet et la méthode ou la variable appartiennent à la même classe. En revanche, dans l’héritage, l’objet appartient à la sous-classe et la variable ou la méthode appartient à la super-classe.
Voir tout pour les différences Java sur 90 sujets
.