从一本书:
如果要调用由超类变量引用的对象的子类定义的方法,该怎么办?假设SoftBall类有一个名为riseBall的方法,它不是由Ball类定义的.你如何从Ball变量中调用它?一种方法是创建子类的变量,然后使用赋值语句来转换对象:
Ball b = new SoftBall();
SoftBall s = (SoftBall)b;
// cast the Ball to a SoftBall
s.riseBall();
Run Code Online (Sandbox Code Playgroud)
我不明白这一点.为什么我不能直接从变量b调用方法?(在这种情况下,变量b包含一个垒球对象).为什么铸造?
你如何从Ball变量中调用它?
你不能.编译器不知道这Ball是一个SoftBall而不是一个BaseBall.
你必须明确地施放.这只是向编译器说的一种方式:"我比你更了解这个实例的类型".编译器信任你(主要是:它不会让你把它投射到,比方说,a String),并让你处理后果(例如潜在的ClassCastException)