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();
}
}