Cast[RESOLVIDO]

4 respostas
giselezr

Oi pessoal

é aparentemente simples, mas não consegui entender pq não faz o cast para A. Esta mostrando sempre TestB

public class TestB extends TestA{

    public void start() {
        System.out.println("TestB");
    }

    public static void main(String[] args) {
        ((TestA)new TestB()).start();
        
        
//       TestA a = (TestA) new TestB();
//        a.start();
    }
}
    class TestA {
     public void start() { System.out.println("TestA"); }
}

Alguem pode me explicar?

abraço

4 Respostas

ViniGodoy

O cast é sim realizado. Mas continuará imprimindo TestB pois o Java fará polimorfismo.

giselezr

se eu fizer assim:

TestA a = new TestB();
a.start();

em tempo de execução vai chamar o metodo de B

mas se fizer:

TestA a = (TestA) new TestB();
a.start();

eu tenho um objeto A, fiz o cast, e não um objeto B, então deveria chamar o metodo de A

não endenti…me explica melhor por favor

abraço

ViniGodoy

Se você deu “new TestB()” então seu objeto é B. Não interesse se você está olhando ele como A ou não.
Tanto a forma com o cast explícito, quanto sem, são completamente equivalentes.

Analogamente: Não é porque você se refere a um cachorro como “o animal”, que ele deixou de ser um cachorro. :slight_smile:

giselezr

hum… entendi,…
tá certo, foi criado um B, ta fazendo cast para A, mas B já é um A de qualquer forma, então o metodo sera chamado de B.
obrigada

Criado 27 de setembro de 2012
Ultima resposta 27 de set. de 2012
Respostas 4
Participantes 2