Tipo apparente C tipo effettivo B.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?
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...![]()