java方法重载继承与多态

标签 java inheritance polymorphism overloading

这是我遇到的一个测试练习题,希望你能帮助我理解这些概念

让 Hawk 成为 Bird 的子类。假设某个类有两个重载方法 void foo(Hawk h) 和 void foo(Bird b)。哪个版本将在调用 foo(x) 之后执行 声明 Bird x = new Hawk();

这是我到目前为止的代码,有人可以向我解释为什么 foo(bird b) 会被执行吗?

public class MPractice {
    public static void main(String args[]) {
        Bird x = new Hawk();
        Third y = new Third();
        y.foo(x);
    }

}



 public class Third {
    void foo(Hawk h) {
        System.out.println("Hawk");
    }
    void foo(Bird b) {
        System.out.println("Bird");
    }


}

最佳答案

当 Java 为选择方法执行重载决策时,它使用变量的类型而不是对象的运行时类型来选择方法。 x 的类型是Bird,所以选择的Third 方法是foo(Bird)

这是因为这里不涉及多态性;我们并没有在 Bird 变量 x 上调用一个可能被覆盖的方法,我们只是在一个不相关的类上调用一组重载方法中的一个,Third

关于java方法重载继承与多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23001314/

相关文章:

java - 是否可以基于字段注入(inject)而不是Map来实现方法结果缓存?

java - 如何在单行android中显示数据库中的多列值

c# - DataContract 将继承类型序列化为基类型

node.js - 创建单 Node 模块以访问用 CoffeeScript 编写的单独文件中的多个扩展类

C++:可以一次添加多个对象的多态容器

Java - 具有相同方法的不同对象的数组

java - Web 服务器无法启动。 8080端口已被使用

java - 尝试使用 Hudson 运行 Selenium 测试 - "Error: no display specified"

perl - 如何在 Perl 中使用 'use base' 继承子例程?

ruby-on-rails - Ruby on Rails 3 : Combine results from multiple has_many or has_many_through associations