Cuando una clase se extiende a más de una clase, se llama herencia múltiple. Por ejemplo: la clase C extiende las clases A y B, por lo que este tipo de herencia se conoce como herencia múltiple. Java no permite la herencia múltiple. En este artículo, discutiremos por qué Java no permite la herencia múltiple y cómo podemos usar interfaces en lugar de clases para lograr el mismo propósito.
¿Por qué Java no admite la herencia múltiple?
C ++, Common lisp y algunos otros lenguajes admiten herencia múltiple, mientras que Java no lo admite. Java no permite la herencia múltiple a evitar la ambigüedad causado por ella. Uno de los ejemplos de este problema es el problema de diamantes que ocurre en herencia múltiple.
Para comprender los conceptos básicos de la herencia, consulte esta guía principal: Herencia en Java
¿Cuál es el problema del diamante?
Discutiremos este problema con la ayuda del siguiente diagrama: que muestra herencia múltiple ya que la Clase D extiende tanto las clases B como C. Ahora suponga que tenemos un método en class A
es class B
Y C
reemplaza ese método a su manera. ¡¡Esperar!! aquí viene el problema – Debido a que D está extendiendo tanto B como C, si D quiere usar el mismo método, ¿qué método se llamaría (el método reemplazado de B o el método reemplazado de C)? Ambigüedad. Esta es la razón principal por la que Java no admite la herencia múltiple.
Podemos implementar más de una interfaz en una clase.
Sí, podemos implementar más de una interfaz en nuestro programa porque esto no causa ninguna ambigüedad (ver explicación a continuación).
interface X { public void myMethod(); } interface Y { public void myMethod(); } class JavaExample implements X, Y { public void myMethod() { System.out.println("Implementing more than one interfaces"); } public static void main(String args[]){ JavaExample obj = new JavaExample(); obj.myMethod(); } }
Producción:
Implementing more than one interfaces
Como puede ver, la clase ha implementado dos interfaces. Una clase puede implementar cualquier número de interfaces. En este caso, no hay ambigüedad aunque ambas interfaces utilizan el mismo método. ¿Por qué? Porque los métodos en una interfaz son siempre abstractos por defecto, lo que no les permite proporcionar su implementación (o definición de método) en la propia interfaz.