//对象转型实例
class TestAnimal{
public static void main(String[] args){
TestAnimal test = new TestAnimal();
Animal a = new Animal("animalName");
Cat c = new Cat("mimi","yellow");
Dog d = new Dog("wangwang","black");
test.f(a);
test.f(c);
test.f(d);
}
//方法f()内的变量为Animal类的引用,该引用可以指向Animal的子类的对象
//即Dog类和Cat类的对象
public void f(Animal a){
System.out.println("Name: " + a.name);
if(a instanceof Cat){
//由于变量a为基类Animal的引用,基类无法访问子类中新增的方法和属性,
//所以必须将a强制转型为子类的引用
Cat cat = (Cat)a;
System.out.println("eyesColor: " + cat.eyesColor);
}
else if(a instanceof Dog){
Dog dog = (Dog)a;
System.out.println("furColor: " + dog.furColor);
}
}
}
//基类Animal
class Animal{
public String name;
Animal(String n){
this.name = n;
}
}
//子类Cat
class Cat extends Animal{
public String eyesColor;
Cat(String n,String c){
super(n);
this.eyesColor = c;
}
}
//子类Dog
class Dog extends Animal{
public String furColor;
Dog(String n,String f){
super(n);
this.furColor = f;
}
}
运行结果:
Name:animalName
Name:mimi
eyesColor:yellow
Name:wangwang
furColor:black