编译时多态
- 实现原理:编译时多态通过方法重载(Overloading)实现。在同一个类中,可以定义多个方法名相同,但参数列表不同(参数个数、参数类型或参数顺序不同)的方法。编译器在编译阶段,根据调用方法时传入的参数类型和个数,确定调用哪个具体的方法。
- 代码示例:
public class CompileTimePolymorphism {
public void printInfo(int num) {
System.out.println("打印整数: " + num);
}
public void printInfo(String str) {
System.out.println("打印字符串: " + str);
}
public static void main(String[] args) {
CompileTimePolymorphism obj = new CompileTimePolymorphism();
obj.printInfo(10);
obj.printInfo("Hello, World!");
}
}
运行时多态
- 实现原理:运行时多态通过方法重写(Overriding)和向上转型实现。当子类继承父类并重写父类的方法时,在运行期间,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 RunTimePolymorphism {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound();
animal2.makeSound();
}
}