MST
星途 面试题库

面试题:Java多态下不同数据类型参数重载方法的调用规则

假设有如下Java代码: ```java 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"); } public void makeSound(String name) { System.out.println(name + " the dog barks"); } } public class Main { public static void main(String[] args) { Animal animal1 = new Dog(); Animal animal2 = new Animal(); Dog dog = new Dog(); // 请分别写出以下调用的输出结果 animal1.makeSound(); animal2.makeSound(); dog.makeSound(); dog.makeSound("Buddy"); // 并解释多态下不同数据类型参数重载方法的调用规则
18.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果
    • animal1.makeSound();
      • 输出:Dog barks。因为animal1的实际类型是Dog,在多态情况下,Java会根据对象的实际类型来调用被重写的方法。
    • animal2.makeSound();
      • 输出:Animal makes a soundanimal2的实际类型是Animal,所以调用Animal类中的makeSound方法。
    • dog.makeSound();
      • 输出:Dog barksdogDog类型的对象,调用Dog类中重写的无参数makeSound方法。
    • dog.makeSound("Buddy");
      • 输出:Buddy the dog barksdogDog类型的对象,调用Dog类中带有String参数的makeSound方法。
  2. 多态下不同数据类型参数重载方法的调用规则
    • 在Java中,多态是指同一个方法调用,根据对象的实际类型不同,会有不同的表现。对于重写的方法(如Dog类重写Animal类的makeSound方法),Java运行时系统会在运行时根据对象的实际类型来选择调用哪个类的方法,这就是动态绑定。
    • 对于重载方法(如Dog类中的makeSound()makeSound(String name)),Java在编译时就确定调用哪个方法,它根据调用方法时传入的参数的数量和类型来选择最合适的方法。如果传入的参数数量和类型与某个重载方法匹配,就调用该重载方法。所以在dog.makeSound("Buddy");中,因为传入了一个String类型的参数,所以调用了makeSound(String name)这个重载方法。