柒_夜4080291
2016-11-12 09:44
感觉自己钻牛角尖,一直有点懵
Cat c=new Cat();//实例化一个对象c 它的类型是Cat
Dog d=new Dog();
Animals an=c; //自动类型提升,向上类型转换 c的类型由Cat转换为Animals
System.out.println(an instanceof Cat);//true
if(an instanceof Cat){ //用instanceof 判断an 是否是Cat类型 ?
Cat c1=(Cat)an;//强制类型转换。转化为Cat类型 讲Animals 类型转换为 Cat类型
}else{
System.out.println("无法进行类型转换 转换成Cat类型");
}
System.out.println(an instanceof Dog);//false
if(an instanceof Dog){//instanceof 判断一个引用是否是某个类型或者某个类型的子类型
Dog d1=(Dog)an;
}else{
System.out.println("无法进行类型转换 转换成Dog类型");
}
具体的都在上面代码的注释里。然后主要问题就是,为什么 an instanceof Cat 为true
an instanceof Dog 为false Dog 和Cat都是Animals 的子类呀。
个人觉得问题是在Animals an=c;上,因为我将这句代码改成Animals an= d;结果就是相反的 但是这个代码不是向上类型转换么,转换的是c或者d的类型,会影响到an么。我有点转不过弯,有没大神为我解答下。万分感谢
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。虽然发生了向上转型,但是,实质上内存存储的依然是Cat类的实例,所以,下边的an instanceof Dog,本质上an这个猫类的实例化对象,会是Dog类的实例吗?想想对象的指向,你就明白了。望采纳,谢谢。
你的代码是进行编译的时候 编译的是dog类型 但是运行的时候 运行的是cat类型
an存储的是cat类的对象
我觉得an instanceof Cat这句话本身就有问题,an是一个对象,Cat是一个类,应该改为Animals instanceof Cat 和Animals instanceof Dog应该就没问题了吧。
Java入门第二季 升级版
530560 学习 · 6091 问题
相似问题