58869333 发表于 2022-3-23 21:12:01

java问题

为什么JAVA要向上转型
向上转型为什么只能调用子类复写的方法

小伤口 发表于 2022-3-23 21:12:02

本帖最后由 小伤口 于 2022-3-23 22:39 编辑

为什么要向上转型?
可以有效的避免重复写代码,举个例子:
比如父类是一个动物类
class Animal{
    public Animal() {
    }
    public void name(){
      System.out.println("我是动物");
    }
}

他有两个子类,分别是鸟和狗
class Bird extends Animal{
    public Bird() {
    }

    @Override
    public void name() {
      System.out.println("我是鸟");
    }
}
class Dog extends Animal{
    public Dog() {
    }

    @Override
    public void name() {
      System.out.println("我是狗");
    }
}

现在我们有一个需求,是要获取所有子类的名称,如果没有向上转型,那么有多少个子类,就要写多少个获取子类名称的方法
有了向上转型,就只要写一个就可以了,像这样
public void getName(Animal animal){
      animal.name();
    }

向上转型为什么只能调用子类复写的方法

还是以上面的例子
这是向上转型实例化的过程
Animal animal=new Bird();

animal是Animal类型,但是他在堆内存其实开辟的是Bird类的空间,所以调用name方法是子类的name方法
如果子类有父类没有的方法,但是因为animal是Animal类型的引用,所以animal这个引用无法指向父类没有的方法
页: [1]
查看完整版本: java问题