面试题答案
一键面试多态的概念
在Java中,多态是指同一个行为具有多个不同表现形式或形态的能力。它允许通过一个父类类型的变量来引用不同子类类型的对象,进而根据对象的实际类型来调用适当的方法。多态主要通过方法重写和对象的向上转型来实现。
动态绑定机制
动态绑定是Java实现多态的核心机制。在运行时,Java虚拟机(JVM)根据对象的实际类型来决定调用哪个方法,而不是根据引用变量的声明类型。具体过程如下:
- 编译器检查引用变量的声明类型和方法签名,确保调用的方法在声明类型的类中存在。
- 在运行时,JVM根据对象的实际类型来选择要调用的方法。如果对象是子类的实例,且子类重写了父类的方法,那么JVM会调用子类中重写的方法;如果子类没有重写,那么会调用父类的方法。
代码示例
class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound();
animal2.makeSound();
}
}
在上述代码中,Animal
是父类,Dog
和 Cat
是子类,它们都重写了父类的 makeSound
方法。在 main
方法中,通过父类 Animal
类型的变量 animal1
和 animal2
分别引用了 Dog
和 Cat
子类的对象。当调用 makeSound
方法时,JVM 根据对象的实际类型(Dog
或 Cat
)来动态绑定并调用相应子类重写的方法,从而实现了多态。