JAVA中的对象类型转换:
一、基类对象可以指向子类对象,但是不可以访问子类对象新添加的成员
如下在运行testFunction()的时候,先在栈内存里面定义一个animal 指向堆内存里面new出来的Animal对象;
然后再运行第二句将animal指向新new出来的Cat对象,而第一步new出来的Animal对象会被GC回收。在new出来
的CAT对象里面存放着一个Animal对象name:whiteCat ;还有Cat自身的成员变量 furColor:2;但是animal是无法访问furColor;
因为这里把 animal当做是Animal而不是CAT。
PS:需要注意的是animal既是Animal的实例也是CAT的实例,因为实例只看你指向的对象是不是该类或其子类的对象
<span style="white-space:pre"> </span>public class Animal(){
private name;
Animal(String name){
this.name = name;
}
}
public class Cat extends Animal{
private int furColor;
Cat(String name,int fColor){
super(name);
furColor = fColor;
}
}
public void testFunction(void){
Animal animal = new Animal("a");
animal = new Cat("whiteCat", 2);
}
二、如果需要访问CAT里面的furColor,则需要强制类型转换如下:
CAT cat1 = (CAT)animal;
cat1.furColor;
以上就是OK的。