Implementa vs extiende: ¿Cuándo usarlo? ¿Cual es la diferencia?
Explique en un lenguaje fácil de entender o con un enlace a algún artículo.
extends
es para ampliar una clase.
implements
es 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 @Override
no 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.
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 extend
una clase (y solo puedes extender desde una) y implement
una 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).