【发布时间】:2012-06-22 01:30:26
【问题描述】:
我一直在学习,因为我要参加考试,而且我对 Java 的大部分内容都没有太多问题,但我偶然发现了一条我无法解释的规则。这是一个代码片段:
public class A {
public int method(Object o) {
return 1;
}
public int method(A a) {
return 2;
}
}
public class AX extends A {
public int method(A a) {
return 3;
}
public int method(AX ax) {
return 4;
}
}
public static void main(String[] args) {
Object o = new A();
A a1 = new A();
A a2 = new AX();
AX ax = new AX();
System.out.println(a1.method(o));
System.out.println(a2.method(a1));
System.out.println(a2.method(o));
System.out.println(a2.method(ax));
}
这会返回:
1 3 1 3
虽然我希望它会返回:
1 3 1 4
为什么是a2的类型决定了AX中调用哪个方法?
我一直在阅读有关重载规则和继承的内容,但这似乎很模糊,以至于我无法找到确切的规则。任何帮助将不胜感激。
【问题讨论】:
标签: java inheritance overloading