面试题答案
一键面试- 动态方法调用的概念:
- 在Java多态中,动态方法调用(Dynamic Method Invocation)是指在运行时根据对象的实际类型来确定调用哪个具体方法,而不是根据引用变量的声明类型。这一机制使得Java能够实现运行时多态性。
- 以简单类继承结构为例:
- 定义类结构:
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多态的继承体系下,动态方法调用通过在运行时确定对象的实际类型,然后调用该实际类型中重写的方法(如果有重写),如果没有重写则调用父类的方法。