public class Overloading {
public static void main(String[] args) {
Overloading o = new Overloading();
o.display(null);
}
void display(String s) {
System.out.println("String method called");
}
void display(Object obj) {
System.out.println("Object method called");
}
}
Run Code Online (Sandbox Code Playgroud)
它将输出作为"String方法调用".我需要解释原因吗?
取自Java规范:
如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符.Java编程语言使用选择最具体方法的规则.
首先:两种方法都是可访问的(显然)且适用.它们都是适用的,因为null
它是类型的nulltype
,根据定义它是所有类型的子类型.String
比具体更具体Object
,因为String extends Object
.如果你想补充以下内容,你将有一个问题,因为这两个Integer
和String
同样"具体":
void display(Integer s) {
System.out.println("Integer method called");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
174 次 |
最近记录: |