Est-il possible d'utiliser abstract et final avec une méthode en Java ?
Non, il n'est pas possible d'utiliser abstract et final avec une méthode simultanément.
- Nous ne pouvons utiliser abstract qu'avec une méthode sans final et elle est valide et le code s'exécutera sans erreur.
- De même, nous ne pouvons utiliser final qu'avec une méthode sans abstract et elle est valide et le code s'exécutera sans erreur.
- Comme nous le savons, nous ne pouvons pas utiliser abstract et final avec une méthode simultanément car il y a deux choses à discuter :
- Tout d'abord, si nous déclarons abstrait avec la méthode, la méthode abstraite doit être remplacée (c'est-à-dire que la méthode abstraite doit être remplacée dans sa classe d'implémentation).
- Deuxièmement, si nous déclarons final avec la méthode, la méthode finale est finale et nous ne pouvons pas remplacer la méthode (c'est-à-dire que la méthode finale ne doit pas être remplacée dans sa classe d'implémentation).
- Quelques points à retenir sur la méthode abstraite et finale :
- Que se passera-t-il si nous utilisons abstract uniquement avec une méthode ?
- Que se passera-t-il si nous n'utilisons final qu'avec une méthode ?
- Que se passera-t-il si nous utilisons abstract et final avec une méthode ?
Nous allons voir chacun des cas ci-dessus un par un à l'aide d'un exemple...
1) Utiliser le mot-clé "abstract" avec une méthode en Java
Exemple :
// Java program to demonstrate the example of // using "abstract" keyword with a method abstract class AbstractMethodClass { // Abstract Method Declaration abstract void display(); } public class Main extends AbstractMethodClass { // override display() of AbstractMethodClass public void display() { System.out.print("abstract specifiers are allowed" + " "); System.out.print("for Methods"); } public static void main(String[] args) { // class instantiation Main m = new Main(); // calling display() of Main class m.display(); } }
Sortie
abstract specifiers are allowed for Methods
Conclusion : Nous ne pouvons utiliser que abstract sans final pour les méthodes.
2) Utiliser le mot-clé "final" avec une méthode en Java
Exemple :
// Java program to demonstrate the example of // using "final" keyword with a method class FinalMethodClass { // Final Method Definition final void display() { System.out.print("final specifier is allowed" + " "); System.out.print("for Methods"); } } public class Main extends FinalMethodClass { // show() method definition public void show() { System.out.print("final method is not overridable"); } public static void main(String[] args) { // class instantiation Main m = new Main(); FinalMethodClass fmc = new FinalMethodClass(); // calling display() of FinalMethodClass fmc.display(); System.out.println(); // calling display() of Main m.show(); } }
Sortie
final specifier is allowed for Methods final method is not overridable
Conclusion : Nous ne pouvons utiliser que final sans résumé pour les méthodes.
3) Utilisation des mots clés "abstract" et "final" avec une méthode en Java
Exemple :
// Java program to demonstrate the example of // using "abstract" and "final" keyword both // with a method class AbstractFinalMethodClass { // Abstract Method Declaration abstract void display(); // Final Method Definition final void show() { System.out.print("final method is not overridable"); } } public class Main extends AbstractFinalMethodClass { // override display() of AbstractFinalMethodClass public void display() { System.out.println("abstract method is overridable"); } public static void main(String[] args) { // Main class object instantiation Main m = new Main(); // AbstractFinalMethodClass object instantiation AbstractFinalMethodClass afmc = new AbstractFinalMethodClass(); // calling display() of Main class m.display(); // calling show() of AbstractFinalMethodClass afmc.show(); } }
Sortie
/Main.java:5: error: AbstractFinalMethodClass is not abstract and does not override abstract method display() in AbstractFinalMethodClass class AbstractFinalMethodClass { ^ 1 error
Conclusion : Nous ne pouvons pas utiliser à la fois abstract et final avec les méthodes car la méthode abstraite remplace dans sa classe d'implémentation, mais la méthode finale ne peut pas remplacer dans sa classe d'implémentation.