考虑以下因素:
class Parent {
public void print(Object s) {
System.out.println("I am inside Parent Object Method.");
}
}
public class Child extends Parent{
public void print(String s) {
System.out.println("I am inside Child String Method.");
}
public static void main(String arg[]) {
Parent a = new Child();
a.print(null);
}
}
输出:
I am inside Parent Object Method
这里JVM正在调用Parent Method来代替子方法,而不管&#34的逻辑如何;应该调用更具体的方法"模糊不清。
在java中实现此实现的原因是什么?
答案 0 :(得分:3)
这里没有涉及任何问题。涉及的是重载。您调用Object的重载方法导致passe值1转换为Integer
对象和Parent
类的打印方法,因为它可用于Child
。
这里没有歧义,因为你重载了不同类型的方法。
答案 1 :(得分:1)
1
不是String
,并且没有自动转换为String
,因此无法将其传递给需要String
参数的方法。
因此public void print(Object s)
被执行,因为int
可以装入Integer
,Object
。
如果您希望执行a.print("1");
,请尝试a.print(null);
甚至public void print(String s)
。