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

Nao entendi essa linha do codigo

abstract class B {
    void x() {
        System.out.println(y());
    }
    abstract int y();
}
abstract class C extends B {
    abstract int y();
}
class D extends C {
    int y() { return 1; }
}
class A {
    public static void main(String[] args) {

        >>>>>>  D d  = (D) (C) new D();  <<<< ???
        d.x();
    }
}
3 respostas
solução!

Boa tarde, Pedro! Como vai?

Nessa linha foram feitas duas operações de casting, primeiro para C e depois para D.

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos!

Oi Pedro,

vc pode desmembrar o código de forma:

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

D d1 = new D();
C c1 = (C) d1;
D d = (D) c1; 
d.x();

E para cada cast vc precisa se perguntar se ele é possível para saber se compila ou não. O cast não compila se for impossível, por exemplo:

//É possível que a referencia c1 aponta para o objeto que a referencia d1 está usando?
C c1 = (C) d1; //eh possível sim

No entanto:

String s = (String) d1; //isso é impossível, não compila

tudo bem?

abs

Agora entendi, obrigado pelo esclarecimento e pela explicação.