Esse código gera uma exception quando executamos. O que não entendo pq ele compila se Y e A não possuem nenhum tipo de relacionamento, como o compilador aceitou o casting?
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) {
Y y = (Y) new A();
}
}