Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida casting

Olá,

Eu peguei o exemplo abaixo, que é de outro aluno:

interface Z {}
interface W {}
interface Y extends Z, W {}
class B {}
class C extends B implements Y {}
class D extends B implements Z, W {}
class E extends C {}
class A {
    public static void main(String[] args) {
        B b = (B) new D();
        D d = (D) new B();
        // Estas conversões  são  possíveis?
    }
}

No exemplo acima foi respondido que as conversões são possíveis.

Agora, o exemplo do exercício 2:

interface Z {}
interface W {}
interface Y extends Z, W {}
class B {}
class C extends B implements Y {}
class D extends B implements Z, W {}
class E extends C {}
class A {
    public static void main(String[] args) {
         C c = (C) new B();
    }
}

Por que no exemplo do aluno foi respondido que D d = (D) new B(); pode ser convertido, mas, no exercício 2, a resposta é Compila e roda dando exception?

2 respostas
solução!

Fala Philippo, tudo bem?

Na verdade ambos os exemplos irão lançar ClassCastException.

Nem todo B é um C, então não podemos fazer esse cast:

C c = (C) new B()

Pela mesma lógica, não podemos converter um B em D

D d = (D) new B()

Mas podemos atribuir um C em um B:

B b = new C();

Entendi! Obrigado, Otávio!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software