Na questão 06 da aula 04 temos a seguinte questão:
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) {
D d = (D) (Y) (B) new D();
}
}
Na resposta diz que Compila mas dá Exception ao executar. Não consegui entender por que compila. Na parte ...(D) (Y)... não deveria dar erro: "cannot convert from Y to D"? pois esse erro dá se eu usar o seguinte código:
D d = (Y) (B) new D();
Qual a diferença? Se não é possível casting de Y para D por que pode ter ...(D)(Y)... no meio do casting? Com casting múltiplos assim, como o compilador faz a verificação? Alguém poderia fazer o passo a passo da verificação do compilador? Quebrar essa linha em partes? Obrigado