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

dúvida casting

D d  = (D) (C) new D();

Na instrução acima como é possível fazer um cast de (C) new D() para (D), sendo que C não é D.

Segue código completo:

abstract class B {
    void x() {
        System.out.println(y());
    }
    abstract int y();
}
abstract class C extends B {
    int y() { return 1; }
}
class D extends C {
    int y() { return 2; }
}
class A {
    public static void main(String[] args) {
        D d  = (D) (C) new D();
        d.x();
    }
}
3 respostas
solução!

Fala aí Rafael beleza?

Quando fazemos a seguinte declaração: (C) new D(); estamos mudando a referencia do objeto para C mas o tipo do objeto continua sendo D.

Por isso conseguimos fazer a seguinte declaração: (D) (C) new D(), pois o tipo do objeto continua sendo D.

Se útil marque como solução.

Olá Fernando! Obrigado pelo feedback. O que entendi é que temos então dois passos, da direita para a esquerda: No primeiro passo temos um downcasting quando fazermos "(D) (C) new D()" e depois um upcasting quando fazer "(D) (C) new D()". Correto?

Correto.