对象转型(casting)要点理解:
1.一个基类的引用类型变量可以‘指向’其子类的对象;
2.一个基类的引用不可以访问其子类对象新增加的成员(属性和方法);
3.子类的对象可以作为基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting);
class Animal {
public String name;
public Animal (String name) {
this.name = name;
}
}
class Cat extends Animal {
public String eyesColor;
public Cat(String name , String eyesColor) {
super(name);
this.eyesColor = eyesColor;
}
}
class Dog extends Animal {
public String furColor;
public Dog(String name , String furColor) {
super(name);
this.furColor = furColor;
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal("Animal");
Cat cat = new Cat("Cat" , "blue");
Dog dog = new Dog("Dog" , "black");
System.out.println("----------1-----------");
System.out.println(animal instanceof Animal);
System.out.println(cat instanceof Animal);
System.out.println(dog instanceof Animal);
System.out.println(animal instanceof Cat);
System.out.println("----------2-----------");
//upcasting
animal = new Dog("bigDog" , "yellow");
System.out.println(animal.name);
//adding the following sentence occurs "compile error" !
// System.out.println(animal.furname);
System.out.println(animal instanceof Animal);
System.out.println(animal instanceof Dog);
Dog bigDog = (Dog)animal;
System.out.println(bigDog.furColor);
}
}
运行结果为: