MST

星途 面试题库

面试题:Java中向上转型在方法调用上的特点

在Java多态中,阐述向上转型后方法调用遵循什么规则,并通过代码示例说明。
23.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

向上转型后方法调用规则

在Java多态中,向上转型(将子类对象赋值给父类引用)后,方法调用遵循“动态绑定”规则,即Java虚拟机在运行时根据对象的实际类型来决定调用哪个方法。具体来说:

  1. 编译期:编译器根据引用变量的声明类型来检查方法是否存在。
  2. 运行期:JVM根据对象的实际类型来决定调用哪个方法。如果子类重写了父类的方法,那么会调用子类重写后的方法;如果子类没有重写,就调用父类的方法。

代码示例

class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Cat meows");
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        Animal animal1 = new Dog(); // 向上转型
        Animal animal2 = new Cat(); // 向上转型

        animal1.makeSound(); // 实际调用Dog类的makeSound方法
        animal2.makeSound(); // 实际调用Cat类的makeSound方法
    }
}

在上述代码中,animal1animal2都是Animal类型的引用,但实际指向的是DogCat对象。在调用makeSound方法时,JVM根据对象的实际类型(DogCat)来调用它们各自重写后的makeSound方法,而不是Animal类中的方法。