Nesse exercício vimos esse exemplo que compila normalmente:
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();
}
}
Na hora que estava analisando o código tive a seguinte conclusão: Bem, o compilador deveria saber que o que está sendo feito o cast atribuido a variável C é um B e não pode ser outra coisa pois o objeto é criado na mesma linha. Não foi colocado em uma variável e depois atribuida a variável c. Qual é a lógica que o compilador usa para deixar que esse código compile?