O que é herança múltipla em Java?

Os desenvolvedores projetaram o Java desde o início para ser uma linguagem de programação completa e orientada a objetos.

OOP e herança

O uso de programação orientada a objetos usa o conceito de herança para estender a funcionalidade de objetos. Pense em quando um programador cria um objeto. Mais tarde, você pode ver que precisa criar um objeto muito semelhante com pequenas diferenças (talvez estenda a funcionalidade de um objeto anterior em um novo contexto). É aqui que a herança aparece. Um objeto que um programador "deriva" de outro objeto "base" herda os métodos e variáveis ​​da classe e, em seguida, pode adicionar mais funcionalidade (como no seguinte exemplo de Java):

classe pública Sphere {public int raio; }

classe pública Ball estende Sphere {cor de corda pública; // Ball adiciona a variável "color", mas também usa a variável "radius"}

Herança múltipla

Em algum momento, um programador pode ser tentado a derivar uma única classe de várias classes. Isso é conhecido como "herança múltipla" e, embora pareça útil, pode causar problemas, como o importante "problema do diamante". Esse problema ocorre quando duas classes herdam da mesma classe (como classe B e C derivam da classe A), enquanto outra classe (D) deriva de B e C. Quando um objeto D é criado, o sistema trata como um tipo de classe base (classe "Bola" ou bola e "Esfera" ou esfera, por exemplo). No problema do diamante, o sistema não pode determinar de forma decisiva qual classe D (é do tipo ABD ou tipo ACD?) É a que causa problemas.

Java e herança múltipla

Devido a problemas com herança múltipla, o Java não permite isso. Mas, na realidade, as classes derivadas de várias classes base podem ser alcançadas de maneira segura usando "interfaces". Uma interface é semelhante a uma classe, mas não apenas define a estrutura da classe, mas também seu código real. Uma classe base que implementa uma interface não necessariamente "herda" a funcionalidade da interface: ela apenas promete o uso de sua estrutura. Como uma classe que implementa uma interface não herda de outra classe (e não é um tipo da classe base), um programador pode implementar várias interfaces usando a mesma classe.

Exemplo: herança e interfaces

O exemplo a seguir mostra a diferença entre a herança de objetos e uma interface. Uma classe que herda de outra obtém acesso à classe base porque basicamente se torna um tipo dessa classe (como nas classes "Ball" e "Sphere"). Uma classe que implementa uma interface só promete implementar a estrutura de sua interface: não é um tipo dessa interface:

interface básica {int doubleA (); // note: nenhum código real é definido na interface}

classe pública B implementa Basic {

public int a;

public int doubleA () // A classe B deve definir o método "doubleA ()" para implementar "Basic" {return a * 2;}}