本帖最后由 long362144768 于 2013-10-10 19:37 编辑
这个主要是涉及引用问题,可能你的引用出现了偏差,类型转换向下转型的要求是,所转目标对象的类必须是引用对象的父类或者本身。其他类不可以package xuexi.sevenday;
public class instensof {
public static void main(String[] args) {
new instensof().call();
}
public void call(){
base b = new base();
b.speak();
base b1 = new child();
b1.speak();
this.callchild(b);
this.callchild(b1);
}
public void callchild(Object obj){
base b2 = (base)obj;
b2.speak();
if(obj instanceof base){
base b3 = (base) obj;
b3.speak();
}
if(obj instanceof child){
base b4 = (child)obj;
b4.speak();
}
}
}
class base{
public void speak(){
System.out.println("base class");
}
}
class child extends base{
public void speak(){
System.out.println("child class");
}
}
打印结果是
base class//b引用的是父类对象实例
child class//b1引用的是子类对象实例
base class
base class
child class
child class
child class
就会抛出异常
Exception in thread "main" java.lang.ClassCastException: xuexi.sevenday.base cannot be cast to xuexi.sevenday.child
at xuexi.sevenday.instensof.call(instensof.java:11)
at xuexi.sevenday.instensof.main(instensof.java:6)
说明你的引用有问题,你的父类引用应该是引用了父类实例,在类型转换时强行转换为子类的实例,编译无法通过的,如果父类引用引用了子类实例,在类型转换时那么可以转换,代码说明 了一切
|