MST

星途 面试题库

面试题:Java中多态的实现方式及原理

请阐述在Java中多态是如何实现的,包括编译时多态和运行时多态,并且详细说明它们各自的实现原理,同时给出相应的代码示例。
21.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

编译时多态

  1. 实现原理:编译时多态通过方法重载(Overloading)实现。在同一个类中,可以定义多个方法名相同,但参数列表不同(参数个数、参数类型或参数顺序不同)的方法。编译器在编译阶段,根据调用方法时传入的参数类型和个数,确定调用哪个具体的方法。
  2. 代码示例
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!");
    }
}

运行时多态

  1. 实现原理:运行时多态通过方法重写(Overriding)和向上转型实现。当子类继承父类并重写父类的方法时,在运行期间,JVM会根据对象的实际类型来决定调用哪个类的重写方法。向上转型是指将子类对象赋值给父类引用,这样通过父类引用调用重写方法时,实际执行的是子类的方法。
  2. 代码示例
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();
    }
}