Dúvida Herança Múltipla Java

9 respostas
mfteixeira_

Olá pessoal, estou implementando um sistema que gerencia locadoras de filme como parte de um trabalho da faculdade.

Minha dúvida é a seguinte: eu tenho três classes, Pessoa, Endereço e Cliente.

com os seguintes extends : Pessoa extends endereço e Cliente extends Pessoa.

Isso caracteriza herança múltipla?

ou somente caracterizaria se pessoa e cliente estendesse de endereço ?

9 Respostas

S

mfteixeira_:
Olá pessoal, estou implementando um sistema que gerencia locadoras de filme como parte de um trabalho da faculdade.

Minha dúvida é a seguinte: eu tenho três classes, Pessoa, Endereço e Cliente.

com os seguintes extends : Pessoa extends endereço e Cliente extends Pessoa.

Isso caracteriza herança múltipla?

ou somente caracterizaria se pessoa e cliente estendesse de endereço ?

Não sei se estou falando basteira mas creio que não. Herença multipla (acredito eu) é quando uma classe herda de mais de uma como:

Cliente extends Endereço, Pessoa

o que não é permitido em Java.

J

Herança multipla é quando uma classe herda de mais de uma… Ou seja, Cliente deveria herdar de endereço e pessoa.
Não há herança multipla em java. O que pode ser feito é implementar mais de uma interface.

F

No Java não é possível usar herança múltipla.
Herança múltipla é uma classe herdar (extends) de mais de uma classe.

“Cliente extends Pessoa, Animal” seria herança múltipla.

Uma classe só pode herdar (ser subclasse) de no máximo 1 outra classe.
Mas uma classe pode ser superclasse de quantas classes forem necessárias.

S
fasts:
No Java não é possível usar herança múltipla. Herança múltipla é uma classe X herdar (extends) de mais de uma classe.

"Cliente extends Pessoa, Animal" seria herança múltipla.

Uma classe só pode herdar (ser subclasse) de no máximo 1 outra classe.
Mas uma classe pode ser superclasse de quantas classes forem necessárias.

Sim, como seria o caso da Classe Cliente.

class Cliente extends Pessoa {

}

class Pessoa extends Object {

}
CyberX

Pessoa extends Endereco ? - Você tem que entender melhor o uso de extends pois quando você usa extends você quer dizer que uma Pessoa É um endereço e isso não está correto.

Cliente extends Pessoa - Correto. Pois um Cliente É uma Pessoa.

Quando você quer dizer que uma Pessoa TEM endereço faça o seguinte.

class Pessoa {
   Endereco enderecoPessoa;
}

Isso caracteriza que a Pessoa TEM endereço.

Essa seria a maneira correta.

Obs: Em Java NÃO EXISTE herança multipla.

drsmachado

mfteixeira_:
Olá pessoal, estou implementando um sistema que gerencia locadoras de filme como parte de um trabalho da faculdade.

Minha dúvida é a seguinte: eu tenho três classes, Pessoa, Endereço e Cliente.

com os seguintes extends : Pessoa extends endereço e Cliente extends Pessoa.

Isso caracteriza herança múltipla?

ou somente caracterizaria se pessoa e cliente estendesse de endereço ?


Desculpe, mas, que absurdo.
Onde é que você consegue conceber que Pessoa É UM Endereço?
Cliente até pode ser uma Pessoa, mas Pessoa ser Endereço, é demais, não é? O máximo que Pessoa terá de Endereço é a relação TEM UM (ou mais, já que pode ser residencial, comercial, etc).

Neste link http://edgarddavidson.com/condicoes-para-uso-de-heranca/ você vai conseguir entender as regras básicas de quando e por que usar herança, mas, basicamente, pense no seguinte:
1 - Herança não resolve tudo e muito mais atrapalha que ajuda.
2 - A relação de herança só é admitida para relacionamentos em que uma classe É UM tipo específico de outra.
3 - Quando tempo as relações de herança entre Pessoa e Cliente e Cliente e ClientePessoaFisica, não temos herança múltipla, mas, uma hierarquia de herança. ClientePessoaFisica É UM tipo especial de Cliente. Cliente, por sua vez, É UM tipo especial de Pessoa.

mauriciot.silva

Gostaria de saber dessas pessoas que dizem que Java
nao tem heranca multipla…

o que eh isso entao???

public interface A extends B, C, ....

a resposta correta seria…
Nao ha heranca multipla para “CLASSES” em java

drsmachado

mauriciot.silva:
Gostaria de saber dessas pessoas que dizem que Java
nao tem heranca multipla…

o que eh isso entao???

public interface A extends B, C, ....

a resposta correta seria…
Nao ha heranca multipla para “CLASSES” em java


Na prática, isso acaba sendo o mesmo que

public class A implements B, C, D, E, WhatTheHellYouWant{} Nada além disso.

drsmachado

Apenas complementando a resposta acima, uma das razões para que java não possua herança múltipla foi a preguiça dos seus idealizadores/desenvolvedores que, por não desejarem complicações com coisas como tratamento de possíveis efeitos colaterais, preferiram “capar” o java.
Um dos efeitos colaterais mais bacanas seria, seguindo o exemplo do nosso camarada mauriciot.silva, o seguinte:

public interface A{
   public Integer soma(int a, int b);
}

E

public interface B{
   public String soma(int a, int b);
}

De onde teríamos

public interface C extends A, B{
  
}

Faça isso em sua IDE favorita e/ou tente compilar só para ver o que acontece.
C++ consegue lidar com isso, java não.
Isso não significa que uma é melhor que outra.

E, para ser imparcial, mesmo que usássemos apenas implements de interfaces, no java, o problema seria o mesmo ainda.

Criado 3 de julho de 2012
Ultima resposta 3 de jul. de 2012
Respostas 9
Participantes 7