类型安全性测试
Object o1 = new Object();
Object o2 = new B();
Object o3 = new D();
Object o4 = o3;
B b1 = new B();
B b2 = new D();
D d1 = new D();
//B b3 = new Object(); CTE
//D d2 = new Object(); CTE
B b4 = d1;
//D d3 = b2; CTE
D d4 = (D)d1;
D d5 = (D)b2;
//D d6 = (D)b1; RTE
//B b5 = (B)o1; RTE
B b6 = (D)b2;
Object o2 = new B();
Object o3 = new D();
Object o4 = o3;
B b1 = new B();
B b2 = new D();
D d1 = new D();
//B b3 = new Object(); CTE
//D d2 = new Object(); CTE
B b4 = d1;
//D d3 = b2; CTE
D d4 = (D)d1;
D d5 = (D)b2;
//D d6 = (D)b1; RTE
//B b5 = (B)o1; RTE
B b6 = (D)b2;
这里 CTE表示编译期间错误,RTE表示运行期间错误。
记住两点,涵盖以上所有类型转换:
1.一个对象可以转为它的任何基类型,不需要任何额外语法,这是一种安全的隐式转换
2.一个对象要显示转换成它的派生类型,这是强制的,因为运行期间可能会发生异常——RTE