58 votes

Existe-t-il un moyen de créer une méthode qui n'est pas abstraite mais qui doit être surchargée ?

Existe-t-il un moyen de forcer les classes enfant à surcharger une méthode non abstraite de la super classe ?

Je dois pouvoir créer des instances de la classe mère, mais si une classe étend cette classe, elle doit donner sa propre définition de certaines méthodes.

1voto

Rodrigo Points 980

Peut-être que cela aide :

class SuperClass {

    void doStuff(){

        if(!this.getClass().equals(SuperClass.class)){

            throw new RuntimeException("Child class must implement doStuff Method");
        }else{
            //ok
            //default implementation
        }
    }
}

class Child extends SuperClass{

    @Override
    void doStuff() {
        //ok
    }
}

class Child2 extends SuperClass{

}

 new SuperClass().doStuff(); //ok
 new Child().doStuff();         //ok
 new Child2().doStuff();        //error

0voto

Tharindu Rusira Points 466

Ok, apprenons de cette façon. J'adhère aux directives de style Java et j'utilise la syntaxe Java. On suppose donc que l'héritage multiple et les templates C++ ne sont pas disponibles.

il n'est pas nécessaire de rendre abstraite la méthode de la classe parente, En POO, vous utilisez le concept de polymorphisme. Vous pouvez utiliser la même méthode de deux ou plusieurs façons différentes. C'est ce qu'on appelle le recouvrement des méthodes.

Prenons un exemple.

    public class Animal{
       public void makeSound(){
          System.out.println("Animal doesn't know how to make sound");
       }

    }

    public class PussyCat extends Animal{
        public void makeSound(){

           System.out.println("meowwww !!!");
        }

        public static void main(String args[]){
           PussyCat aCat=new PussyCat();
           aCat.makeSound(); 
        }
    }

ceci imprimera "meowww ! !!" sur l'écran.

mais cela n'implique pas que la méthode makeSound doit être surchargée dans la classe enfant.

Si vous voulez que la classe enfant soit obligée de surcharger les méthodes, il vaut mieux implémenter une interface par la classe.

      public Interface audible{
         public void makeSound();

      }

      public class pussyCat implements audible{
          // now you must implement the body of makeSound method here
          public void makeSound(){
            System.out.println("meowwww !!!"); 
          }

          public static void main(String args[]){
           PussyCat aCat=new PussyCat();
           aCat.makeSound(); 
        }
      }

ceci imprimera également "meowwww ! !!" sur l'écran.

0voto

Itay wazana Points 160

Ce n'est peut-être pas recommandé, mais vous pouvez lancer une exception (quelque chose comme MethodeMustBeOverRiddenExp) dans l'implémentation de votre méthode. Bien sûr, c'est un forcing RunTime, mais c'est peut-être mieux que rien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X