Originariamente inviato da cagnaluia
class B extends C
{
void x() { System.out.println("X");}
}


class C
{
void x() { System.out.println("Y");}
}

public class A
{
A()
{
C x=new B();
x.x();
}

public static void main(String args[]) {
new A();
}
}



Questa stamperebbe: X,

se fosse.

1. C x=new C(); stamperebbe Y
2. B x=new B(); stamperebbe X
3. B x=new C(); ERRORE, ma si potrebbe farlo eseguire, con il cast forse? Come?
Tipo apparente C tipo effettivo B.
Non puoi fare cosi' pero'.
Devi fare C x = new B();//Tipo apparente C, tipo effettivo B
Per invocare il metodo del tipo effettivo devi fare un cast sull'oggetto x.
Prova...

P.S.: non e' una buona idea chiamare metodi e oggetti allo stesso modo...