MST
星途 面试题库

面试题:Java多态在继承类层次结构中的应用

假设有一个动物类Animal,有一个方法叫makeSound。然后有两个子类Dog和Cat继承自Animal并重写makeSound方法。请编写代码实现一个方法,该方法接受一个Animal类型的参数,在方法内部调用这个参数的makeSound方法,并展示如何通过传递Dog和Cat的实例来体现多态性。同时解释这里多态是如何实现的。
50.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

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

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

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

public class Main {
    public static void makeAnimalSound(Animal animal) {
        animal.makeSound();
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();

        makeAnimalSound(dog);
        makeAnimalSound(cat);
    }
}

多态的实现原理

  1. 继承DogCat类继承自Animal类,它们拥有Animal类的属性和方法,并可以重写Animal类中的方法。
  2. 重写DogCat类重写了Animal类中的makeSound方法,提供了各自特定的实现。
  3. 向上转型:在makeAnimalSound方法中,参数类型是Animal,但可以传递DogCat的实例,这就是向上转型。此时编译器只知道参数是Animal类型,运行时会根据实际对象(DogCat)的类型来调用对应的makeSound方法。这就是多态的体现,即同一方法调用,根据对象实际类型的不同,执行不同的行为。