Java >> Tutoriel Java >  >> Tag >> final

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 :
    1. Que se passera-t-il si nous utilisons abstract uniquement avec une méthode ?
    2. Que se passera-t-il si nous n'utilisons final qu'avec une méthode ?
    3. 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.


Balise Java