803 votes

Implémenter ou étendre. Quand utiliser. Quelle est la différence?

Implémenter ou étendre. Quand utiliser. Quelle est la différence?

Désolé pour une question aussi simple. J'ai cherché ceci et ai lu quelques articles mais je ne parais pas le comprendre correctement.

Quelqu'un peut-il expliquer dans une langue facile à comprendre ou un lien vers un article?

839voto

tgoossens Points 1790

extends est pour l'extension d'une classe.

implements est pour la mise en œuvre d'une interface

La différence entre une interface et une classe ordinaire est que dans une interface vous ne pouvez pas spécifier une application spécifique (uniquement son "interface"). Plus précis, cela signifie que vous ne pouvez spécifier des méthodes, mais pas de les mettre en œuvre.

Aussi java ne supporte pas l'héritage multiple pour les classes. Ce problème est résolu par l'utilisation de plusieurs interfaces.

 public interface ExampleInterface{
    public void do();
    public String doThis(int number);
 }

 public class sub implements ExampleInterface{
     public void do(){
       //specify what must happen
     }

     public String doThis(int number){
       //specfiy what must happen
     }
 }

maintenant, l'extension d'une classe

 public class SuperClass{
    public int getNb(){
         //specify what must happen
        return 1;
     }

     public int getNb2(){
         //specify what must happen
        return 2;
     }
 }

 public class SubClass extends SuperClass{
      //you can override the implementation
      @Override
      public int getNb2(){
        return 3;
     }
 }

dans ce cas

  Subclass s = new SubClass();
  s.getNb(); //returns 1
  s.getNb2(); //returns 3

  SuperClass sup = new SuperClass();
  sup.getNb(); //returns 1
  sup.getNb2(); //returns 2

Je vous suggère de faire plus de recherche sur la dynamique de la liaison, le polymorphisme et, en général, de l'héritage en programmation orientée Objet

83voto

goldilocks Points 6181

J'ai remarqué que vous avez en C++ questions dans votre profil. Si vous comprenez le concept de multi-héritage en C++ (en se référant à des classes qui héritent des caractéristiques de plus d'une autre classe), Java ne permet pas cela, mais il a de mot-clé interface, ce qui est un peu comme une classe virtuelle pure en C++. Comme mentionné par beaucoup de gens, vous extend d'une classe (et vous ne pouvez l'étendre à partir de l'un), et vous implement une interface: mais vous pouvez implémenter autant d'interfaces que vous le souhaitez.

C'est à dire, ces mots-clés et les règles régissant leur utilisation, de délimiter les possibilités de multi-héritage en Java (vous pouvez seulement avoir un super classe, mais vous pouvez implémenter plusieurs interfaces).

43voto

Oli Charlesworth Points 148744

extends est pour quand vous héritez d'une classe de base (c'est-à-dire étendre ses fonctionnalités).

implements est pour quand vous implémentez une interface .

Voici un bon point de départ: les interfaces et l'héritage .

35voto

Hari Shankar Points 9405

Un class ne peut "mettre en œuvre" un interface. Une classe seulement "étendre" class. De même, une interface pouvez étendre une autre interface.

Un class ne peut étendre une autre class. Un class peut implémenter plusieurs interfaces.

Si au contraire vous êtes plus intéressés à savoir quand utiliser l' abstract classes et interfaces, reportez-vous à ce fil: une Interface vs Classe Abstraite (général OO)

12voto

Kazekage Gaara Points 7978

Met en place est utilisé pour les Interfaces et s'étend est utilisé pour étendre une classe.

Pour la rendre plus claire en termes plus facile,une interface est comme il le son - une interface - un modèle, que vous devez appliquer,suivre, ainsi que vos idées.

Étendre est utilisé pour les classes,ici,vous êtes à l'extension de quelque chose qui existe déjà, en ajoutant plus de fonctionnalités.

Quelques remarques:

une interface peut étendre une autre interface.

Et quand vous avez besoin de choisir entre la mise en œuvre d'une interface ou d'extension d'une classe pour un scénario particulier, aller de la mise en œuvre d'une interface. Parce qu'une classe peut implémenter plusieurs interfaces, mais s'étendent d'une seule classe.

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