关于instanceof的一个疑问
感觉自己钻牛角尖,一直有点懵
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么。我有点转不过弯,有没大神为我解答下。万分感谢