java方法重载继承和多态

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

让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,所以选择的第三个方法是foo(Bird).

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

上一篇:php多态-在多态子功能中调用父功能


下一篇:多态是否适用于Java中的类属性?