import java.awt.*;public class demo
{
public void method(Object o)
{
System.out.println("Object Version");
}
public void method(int i)
{
System.out.println("Int Verion");
}
public void method(StringBuffer sb)
{
System.out.println("StringBuffer Verion");
}
public void method(String s)
{
System.out.println("String Version");
}
public void method(Button b)
{
System.out.println("Button Version");
} public static void main(String args[])
{
demo demo = new demo();
demo.method((Button)null);
demo.method((StringBuffer)null);
demo.method((String)null);
demo.method((Object)null);
// demo.method((int)null);//this can not passed
demo.method((int)('9'));
}
}
结果:
Button Version
StringBuffer Verion
String Version
Object Version
Int Verion
{
public void method(Object o)
{
System.out.println("Object Version");
}
public void method(int i)
{
System.out.println("Int Verion");
}
public void method(StringBuffer sb)
{
System.out.println("StringBuffer Verion");
}
public void method(String s)
{
System.out.println("String Version");
}
public void method(Button b)
{
System.out.println("Button Version");
} public static void main(String args[])
{
demo demo = new demo();
demo.method((Button)null);
demo.method((StringBuffer)null);
demo.method((String)null);
demo.method((Object)null);
// demo.method((int)null);//this can not passed
demo.method((int)('9'));
}
}
结果:
Button Version
StringBuffer Verion
String Version
Object Version
Int Verion
至于题目吗,我想对null作method()判断时,应该自动作类型转换,但是无论如何同时存在String 和 StringBuffer编译器强制类型不能选择通过,也就是我们编程序的思路应该改变(应该在调用方法的时候进行强制类型转换。以上是我对本题目的猜想
以下是解答:
这是一个OverLoad的问题(不是OverRiding),当你传入NULL时,编译器会自动匹配最"特殊"的参数,这里特殊是指String派生自Object,所以,String比Object特殊,(你应该明白吧!这是面向对象的基本思想),第二题为什么错,是因为StringBuffer与String都是同一等级的,因此,传入Null时,编译器无法辨别,So it's wrong !!!
你的看法基本上是对的……
实际上这种情况下,满足条件的多个方法如果不具有继承关系,则编译器就会报错,和是否同一等级无关……
但为什么是匹配最“特殊”的参数呢?SUN对此有说明吗?你是在哪里知道的呢?