对象的转型

 
//对象转型实例


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

你可能感兴趣的:(对象的转型)