Instancia

Amigos,
tenho a seguinte situação.
class A{}
class B extends A{}
qdo instancio da seguinte forma:
A teste = new B();
teste é uma instancia de B ?

HERANÇA constitui a relação É UM

dessa forma

quando vc fizer B extends A, entao está dizendo que A é um B… heheeeh

é uma forma abstrata de criar um objeto do tipo A que referencia um B. Dessa forma vc pode criar uma variedade de objetos atraves da classe A.

exemplo:

Class Animal{}
Class cavalo extends Animal{}
Class cachorro extends Animal{}

quando vc criar um objeto do tipo animal, vc esta falando que seu objeto pode ser tanto um cachorro quanto qualquer outra classe que seja descendente de um animal…

ops…

respondendo a sua pergunta…

teste é uma instancia de A especificado pelo B…

:stuck_out_tongue:

Sim, teste é tanto uma instancia de B como de A. Faça o teste:

class A{} class B extends A{} public class Teste { public static void main(String[] args) { A teste = new B(); if(teste instanceof A) { System.out.println("teste é uma instancia de A"); } if(teste instanceof B) { System.out.println("teste é uma instancia de B"); } } }

T+

Isso chama-se herança multipla. Na verdade se TESTE for B, ele tambem é A, pois A herda de B.
Me corrijam se eu estiver errado!!! [8)]

xwilliansilvax wrote:

[quote]Isso chama-se herança multipla. Na verdade se TESTE for B, ele tambem é A, pois A herda de B.
Me corrijam se eu estiver errado!!![/quote]

Mas eu pensei que em java não existia herança mutipla… :?

Herança múltipla é uma classe poder compor comportamentos de várias classes. No caso do java, existe apenas herança simples. Logo, B herda características de A.

Imagine isto enquanto um conjunto. Do lado de Fora, ‘A’. Do lado de dentro, B. Significa que todo ‘B’ é um ‘A’. Mas nem todo ‘A’ é um ‘B’.

[quote=Wilhans]Amigos,
tenho a seguinte situação.
class A{}
class B extends A{}
qdo instancio da seguinte forma:
A teste = new B();
teste é uma instancia de B ?
[/quote]

analise isso da seguinte forma:

“Voce tem um objeto do Tipo A que referencia a uma subclassE” - isso que dizer que vc pode chamar os metodos herdados que foram subscrito pela subclasse… ai temos o polimorfismo… veja a essencia disso:

class A{
public void az(){
System.out.println("A");}
}
class B extends A{
public void az(){
System.out.println("B");}
}
class Test{
public static void main(String arg[]){
A objt = new B();
objt.az(); // qual vc acha q ele vai imprimir? A ou B?
}}

se vc respondeu B acertou… ele imprime B simplesmente pq vc tem um objeto que além de fazer tudo que A faz ele tb pode chamar os metodos subscrito pela subclasse… como meu metodo az() foi subscrito pela subclasse nesse caso ai ele chama o metodo subscrito ja que o objeto é do Tipo A e referencia a um objeto da subsclasse: A objt = new B();

espero ter ajudado :smiley:

obs.: isso so funciona com metodo de instancia, os metodos static nao funciona… quando estudar static vai ver a diferença… :smiley:

Pelo amor! Que bagunça pessoal!

Primeiro, o Zakim inverteu as bolas… “B é um A” é o correto.

Segundo, Java não tem herança múltipla. Um comportamento parecido com o de herança múltipla no Java é alcançado utilizando interfaces…

Agora, voltando a pergunta…

Sim, teste é uma instância de B.

Vc criou um objeto do tipo B, então a instância é de B, apesar da referência ser do tipo A, que no caso é superclasse de B, fazendo com que isso seja permitido.

Até mais!