Bootstrap

Java向上转型和向下转型

向上转型

子类引用的对象转化为父类类型称为向上转型,通俗点说就是将子类对象转化为父类对象,此处父类对象可以是接口。格式是Person p = new Person();

向上转型也是多态的条件之一,所以用到的地方非常多。

看一个示例:

class Animal {  
    public void eat(){
        System.out.println("animal eatting...");
    }
}

public class Bird extends Animal{

    public void eat(){

        System.out.println("我吃昆虫");
    }
    
    public void fly(){
        System.out.println("我能飞");
    }
}

public class Dog extends Animal{

    public void eat(){

        System.out.println("我吃肉");
    }

    public void run(){
        System.out.println("我会跑");
    }
}

public class Main {

    public static void main(String[] args) {

        Animal animal = new Bird(); //向上转型
        animal.eat();

        animal = new Dog();
        animal.eat();
    }

}

//结果:
//我吃昆虫
//我吃肉

向上转型会遇到的问题
  • 向上转型时,子类单独定义的方法会缺失。譬如上面的示例,当animal实例指向引用时是无法调用run方法的,animal.run()会报错。
  • 子类引用不能指向父类对象。Bird b = (bird)new Animal()这样是错误的。
向上转型的好处(其实也是多态的好处)
  • 减少重复代码,使代码变得简洁。
  • 提高系统扩展性。

向下转型

与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。

注意事项
  • 向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)
  • 向下转型只能转型为本类对象(鸟是不能变成狗的)。
;