当编译和运行下列程序段时,会发生什么? C
class Base {}
class Sub extends Base {}
class Sub2 extends Base {}
public class CEx{
public static void main(String argv[]){
Base b = new Base();
Sub s = (Sub) b;
}
}
A 通过编译和并正常运行。 B 编译时出现错误。
C 编译通过,运行时出现异常。 D 以上都错
问为什么选C,最好能详细点,初学,谢谢。
(Sub)b ,这个地方涉及到了一个强制转换的问题,强制转化对于编译来说的话是不会报错的,当其在运行的时候,首先你要看清楚是Sub 继承了 Base,而不是Base继承了Sub,sub里面拥有父类base的所有特性,但base却不会完全包含sub里面的特性,这个时候如果强制转换的话在运行的时候肯定会报错的,强制转换只能把大类往小类上转,就像float转int一样,你不可能把int往float上转。这个地方如果写成
Sub B = new Sub();
Base s = (Base)b;
就对了
会抛出类型转换异常,因为b是Base的实例,而Base并没有一个父类是Sub,所以无法转换