MST

星途 面试题库

面试题:Java多态中动态方法调用基础

请详细描述Java多态中动态方法调用在继承体系下是如何确定调用哪个具体方法的?以一个简单的类继承结构为例说明。
50.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 动态方法调用的概念
    • 在Java多态中,动态方法调用(Dynamic Method Invocation)是指在运行时根据对象的实际类型来确定调用哪个具体方法,而不是根据引用变量的声明类型。这一机制使得Java能够实现运行时多态性。
  2. 以简单类继承结构为例
    • 定义类结构
class Animal {
    public void makeSound() {
        System.out.println("Generic animal sound");
    }
}

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

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow!");
    }
}
  • 动态方法调用过程
    • 当我们有如下代码:
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound();
animal2.makeSound();
 - 这里`animal1`和`animal2`的声明类型都是`Animal`,但`animal1`实际指向`Dog`类型的对象,`animal2`实际指向`Cat`类型的对象。
 - 在执行`animal1.makeSound()`时,Java虚拟机(JVM)会在运行时检查`animal1`实际指向的对象类型(即`Dog`)。因为`Dog`类重写了`Animal`类的`makeSound`方法,所以会调用`Dog`类中的`makeSound`方法,输出“Woof!”。
 - 同理,执行`animal2.makeSound()`时,JVM检查到`animal2`实际指向`Cat`类型的对象,由于`Cat`类重写了`Animal`类的`makeSound`方法,所以会调用`Cat`类中的`makeSound`方法,输出“Meow!”。

总结来说,在Java多态的继承体系下,动态方法调用通过在运行时确定对象的实际类型,然后调用该实际类型中重写的方法(如果有重写),如果没有重写则调用父类的方法。