public class A
{
public void display(int i)
{
System.out.println("Inside A");
}
}
public class B extends A
{
public void display(Integer i)
{
System.out.println("Inside B");
}
}
public class starter
{
public static void main (String args[])
{
A a = new B();
a.display(5);
System.out.println("So now you know or not");
}
}
输出:内部A
有人可以解释这个输出吗?通常应该调用子方法。当我们有一个包装类和一个使用继承的原始类时,Java如何表现?
答案 0 :(得分:4)
B#display
不覆盖A#display
,因为签名不同。
事件int
可以装入Integer
s,这与此无关。
您可以使用@Override
注释轻松验证这一点。
由于a
的引用类型为A
,因此使用文字整数(您的给定5
参数)的完全匹配来解析该方法,即int
因此调用A#display
。
您仍然可以通过使用此习惯用法强制调用B#display
(不适用于生产代码):
((B)a).display(new Integer(5));
这会将您的a
变量转换为B
类型,从而允许在上下文中查看B
的{{1}}方法。
它还会传递display
而不是Integer
,因此会使用int
B
方法的签名并允许解析该方法。