我有以下代码:
public class Main {
public void method(Object o)
{
System.out.println("Object Version");
}
public void method(String s)
{
System.out.println("String Version");
}
public static void main(String args[])
{
Main question = new Main();
question.method(null);//1
}
}
Run Code Online (Sandbox Code Playgroud)
为什么结果是"字符串版本"?如果第一个方法接受一个StringBuffer对象,为什么会出现编译器错误?
另一种情况:如果第一个方法接受一个StringBuffer对象,我写question.method("word");的结果将是"String Version".为什么?为什么没有编译器错误?
dud*_*mar 23
JAVA规范说,在这种情况下,将调用最具体的功能.由于String是Object的子类型 - 将调用第二个方法.如果将Object更改为StringBuffer - 则没有特定的方法,因为StringBuffer不是String的子类型,反之亦然.在这种情况下,编译器不知道要调用哪个方法 - 因此错误.
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |