Implementa vs extiende: ¿Cuándo usarlo? ¿Cual es la diferencia?

Resuelto Saad Masood asked hace 12 años • 19 respuestas

Explique en un lenguaje fácil de entender o con un enlace a algún artículo.

Saad Masood avatar Jun 01 '12 01:06 Saad Masood
Aceptado

extendses para ampliar una clase.

implementses para implementar una interfaz

La diferencia entre una interfaz y una clase normal es que en una interfaz no se puede implementar ninguno de los métodos declarados. Sólo la clase que "implementa" la interfaz puede implementar los métodos. El equivalente en C++ de una interfaz sería una clase abstracta (no EXACTAMENTE igual, pero sí más o menos).

Además, Java no admite herencia múltiple para clases. Esto se resuelve mediante el uso de múltiples interfaces.

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

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

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

ahora extendiendo una clase

 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;
     }
 }

en este caso

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

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

Además, tenga en cuenta que @Overrideno se requiere una etiqueta para implementar una interfaz, ya que no hay nada en los métodos de la interfaz original que deba anularse.

Le sugiero que investigue un poco más sobre enlace dinámico, polimorfismo y, en general, herencia en programación orientada a objetos.

tgoossens avatar May 31 '2012 18:05 tgoossens

Noto que tienes algunas preguntas sobre C++ en tu perfil. Si comprende el concepto de herencia múltiple de C++ (refiriéndose a clases que heredan características de más de una clase), Java no lo permite, pero tiene la palabra clave interface, que es algo así como una clase virtual pura en C++. Como lo mencionó mucha gente, eres extenduna clase (y solo puedes extender desde una) y implementuna interfaz, pero tu clase puede implementar tantas interfaces como quieras.

Es decir, estas palabras clave y las reglas que rigen su uso delinean las posibilidades de herencia múltiple en Java (sólo puedes tener una superclase, pero puedes implementar múltiples interfaces).

CodeClown42 avatar May 31 '2012 18:05 CodeClown42