当然是会有异常啦
public static void main(String args[])
{
A a=new A();
B b=new B();
b=(B)a;
~~~~~~~~~~~此处a是类A的一个实例,你不能通过通过强制类型的转换将其转换为类B的实例
//a.callme();
b.callme();
}
如果是这样子,
A a = new B();
B b = (B)a;
就可以了~
public static void main(String args[])
{
A a=new A();
B b=new B();
b=(B)a;
~~~~~~~~~~~此处a是类A的一个实例,你不能通过通过强制类型的转换将其转换为类B的实例
//a.callme();
b.callme();
}
如果是这样子,
A a = new B();
B b = (B)a;
就可以了~
>但是可以对超类的引用进行强制转换。不知所云
当然可以转换了但是需要注意的是(Parent)Child是可以的,反之,(Child)Parent则会冒一定的风险,
也就是你所遇到的ClassCastException,也就是说b=(B)a;中,a本身不是B类型或者B的子类型,所以当你强制转换的时候,会得到这么一个运行期错误。
B b = (B)a;
C c = (C)a;
C c2 = (C)b;都可以的子类可以转以父类:这个本身就没有问题,因为这本身就是一个"is a"的关系
父类不能转为子类:不能转的前提是,要转的对象并不属于要转的目标class,
也就是说它不是is a child;反之,如果想上面,我举的例子中a的声明类型是A
而其真实类型是C,所以把它转乘B,C类型都是没有任何问题的