Java - 关于子类父类的向上转型,向下转型

 

以下Animal为父类,Dog,Cat作为子类,分别继承Animal

class Animal{
    public void shout(){
        System.out.println("叫了一声");
    }
}

class Dog extends Animal{
    public void shout() {
        System.out.println("旺旺旺");
    }
    public void seeDoor() {
        System.out.println("看门中");
    }
}

class Cat extends Animal{
    public void shout() {
        System.out.println("喵喵喵");
    }
}

 

总结:

  1. Dog对象转成Animal对象可行,如d2

      Cat对象转成Animal对象可行,如c2

  2. d2作为Animal对象转成Dog对象可行。如d3,且可执行一个Dog特有的方法

  3. c2作为Animal对象转成Dog对象,编译通过,运行报错,显示 java.lang.ClassCastException,类型转化出错

 

实例代码:

1. Dog对象转成Animal对象可行,如d2

    Cat对象转成Animal对象可行,如c2

public class TestPoym{
    public static void main(String[] args) {
        Dog d1 = new Dog();
        animalCry(d1);
        Animal d2 = new Dog();  //向上转型
        animalCry(d2);

      Animal c1 = new Cat();
      animalCry(c1);
      Animal c2 = new Cat();
      animalCry(c2);

    }
    
    static void animalCry(Animal a) {
        a.shout();
    }
}

结果:

2. d2作为Animal对象转成Dog对象可行。如d3,且可实现一个Dog特有的方法,看门

public class TestPoym{
    public static void main(String[] args) {
        Dog d1 = new Dog();
        animalCry(d1);
        Animal d2 = new Dog();  //向上转型
        animalCry(d2);
        Animal c1 = new Cat();
        animalCry(c1);
        Animal c2 = new Cat();
        animalCry(c2);
        
        Dog d3 = (Dog)d2;  //向下转型
        d3.seeDoor();
        
    }
    
    static void animalCry(Animal a) {
        a.shout();
    }
}

结果:

3.  c2作为Animal对象转成Dog对象,编译通过,运行报错,显示 java.lang.ClassCastException,类型转化出错

代码:

public class TestPoym{
    public static void main(String[] args) {
        Dog d1 = new Dog();
        animalCry(d1);
        Animal d2 = new Dog();  //向上转型
        animalCry(d2);
        Animal c1 = new Cat();
        animalCry(c1);
        Animal c2 = new Cat();
        animalCry(c2);
        
        Dog d3 = (Dog)d2;  //向下转型
        d3.setDoor();
        
        Dog c3 = (Dog)c2;  //编译通过,运行出错,显示强制转换出错
    }
    
    static void animalCry(Animal a) {
        a.shout();
    }
}

结果:

 

posted on 2019-04-02 10:35  kl_1998  阅读(2593)  评论(0编辑  收藏  举报

导航