Herança Múlplita Ou NÃO?

4 respostas
Vecchiato

De acordo com o java tutorial é dito
Note: All enums implicitly extend java.lang.Enum. Since Java does not support multiple inheritance, an enum cannot extend anything else.
http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html

E ele também diz que:
Every class is a descendant, direct or indirect, of the Object class
http://java.sun.com/docs/books/tutorial/java/IandI/objectclass.html

A duvida é:
Dizem que java não suporta herança múltipla, mas se toda classe herda direta ou indiretamente a classe Object como então uma classe criada por mim pode extender uma outra classe sendo que essa minha classe ja herda de Object?

Mesmo isto sendo possível por que então não ocorre o mesmo com enumeração?

Desde já Agradeço :wink:

4 Respostas

fabiozoroastro

Se vc faz.

ClasseA extends ClasseB {}
ClasseB {}

A classeB estende a classe Object, então, a ClasseA é filha de Object. :slight_smile:

T

a) Toda classe é descendente direta ou indireta da classe Object.

Ou seja: todos nós somos descendentes de Adão, direta ou indiretamente. É isso que ele quis dizer.

Por exemplo:

class Pessoa /* extends Object */ { ... }
class Cliente extends Pessoa { ... }

Neste caso, Cliente é um descendente indireto de Object.

b) Todos os enums estendem java.lang.Enum.

Ou seja: como java.lang.Enum descende de java.lang.Object, então está tudo OK. Você pode dizer tranquilamente:

enum Cores {
    AZUL, VERMELHO, AMARELO
}

Cores cor = Cores.AZUL;

if (cor instanceof Object)... // true
if (cor instanceof java.lang.Enum) ... // true

Não há herança múltipla

pcalcado

A herança de object é transitiva.

class A /* extends Object*/{
}

class B extends A{
}

Se B estende A e A estende Object então B estende Object.

L

Lembre-se: herança multipla é quanto um objeto é filho de dois ou mais objetos, e estes ESTÃO NO MESMO NÍVEL DE HIERARQUIA.

Um objeto é implicitamente filho de Object quando você não coloca um extends depois da definição da classe. Caso você defina uma classe com nome Derived filho de uma outra classe com nome Base, a classe Derired já não é mais filho da classe Object.

Criado 14 de novembro de 2007
Ultima resposta 14 de nov. de 2007
Respostas 4
Participantes 5