MST

星途 面试题库

面试题:Java类中的多态如何实现

请阐述在Java类中实现多态的方式有哪些,并结合代码示例说明重写与重载在实现多态过程中的作用。
42.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

在Java类中实现多态的方式

  1. 方法重写(Override)
    • 发生在子类与父类之间,子类重写父类的方法。当通过父类引用调用重写的方法时,实际执行的是子类的方法实现,这体现了运行时多态。
    • 重写要求方法名、参数列表、返回类型(或是其子类型,在Java 5.0及之后)必须与父类被重写的方法相同,访问权限不能比父类中被重写的方法更严格。
  2. 方法重载(Overload)
    • 在同一个类中,方法名相同但参数列表不同(参数个数、类型或顺序不同)。调用时根据传入的参数来决定调用哪个重载方法,这体现了编译时多态。

代码示例

class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    // 重写makeSound方法
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    // 重写makeSound方法
    @Override
    public void makeSound() {
        System.out.println("Cat meows");
    }
}

class SoundMaker {
    // 方法重载
    public void makeSound(Animal animal) {
        animal.makeSound();
    }

    public void makeSound(Dog dog) {
        dog.makeSound();
    }
}

重写与重载在实现多态过程中的作用

  1. 重写
    • 重写实现了运行时多态。在下面的代码中:
public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();
        animal1.makeSound();// 实际执行Dog的makeSound方法
        animal2.makeSound();// 实际执行Cat的makeSound方法
    }
}
  • animal1animal2虽然声明为Animal类型,但由于它们实际指向的是DogCat对象,调用makeSound方法时会执行子类重写后的方法,体现了运行时多态。
  1. 重载
    • 重载实现了编译时多态。在下面的代码中:
public class Main2 {
    public static void main(String[] args) {
        SoundMaker soundMaker = new SoundMaker();
        Animal animal = new Dog();
        Dog dog = new Dog();
        soundMaker.makeSound(animal);
        soundMaker.makeSound(dog);
    }
}
  • 根据传入参数的不同(Animal类型和Dog类型),编译器会在编译时决定调用哪个makeSound方法,体现了编译时多态。