比如 public void f(int[] a) { }public void f(double[] a) { }你调用f(null); 就不行,因为null对以上俩个都适合,编译器不知道调用哪个 当然又歧义System.out.println(null); 同理,println()方法也有重载
我问下null是对象(Object)吗?
f(null)就不行这谁不知道啊!!!我要问的是System.out.println(Object o)这不是他的一种方式吗? 而null不也是object类型的吗?为什么不行呢?我当然运行了也看到错误了,就是不明白为什么错误吗class Test { public static void main(String[] args) { System.out.pritnln(null); } } 程序很简单就像上面这样
我跟你解释半天白解释了你看看System.out.println(); 这个方法里参数可不止Object一种 什么时候它才会匹配Object你知道么??比如 class A { } class B extends A { }public void f(A a) { } public void f(B b) { }调用f(new B()); 应该是调用后一个,没错吧 它是从下到上的所以System.out.println(null); 它最先匹配的不是Object 只有其他重载的函数里都没有符合的时候才来匹配Object 可现在不是其他重载的函数没有匹配 而是有多个匹配明白了吧?
这里得null可以当做任何对象
对编译器来说又歧义
为什么不跟System.out.println()的函数原型对照一下呢。它的参数里可以是null吗?
public void f(int[] a)
{
}public void f(double[] a)
{
}你调用f(null);
就不行,因为null对以上俩个都适合,编译器不知道调用哪个
当然又歧义System.out.println(null);
同理,println()方法也有重载
f(null)就不行这谁不知道啊!!!我要问的是System.out.println(Object o)这不是他的一种方式吗?
而null不也是object类型的吗?为什么不行呢?我当然运行了也看到错误了,就是不明白为什么错误吗class Test {
public static void main(String[] args) {
System.out.pritnln(null);
}
}
程序很简单就像上面这样
这个方法里参数可不止Object一种
什么时候它才会匹配Object你知道么??比如
class A
{
}
class B extends A
{
}public void f(A a)
{
}
public void f(B b)
{
}调用f(new B());
应该是调用后一个,没错吧
它是从下到上的所以System.out.println(null);
它最先匹配的不是Object
只有其他重载的函数里都没有符合的时候才来匹配Object
可现在不是其他重载的函数没有匹配
而是有多个匹配明白了吧?
举个例子看看:
public class Main { public static void main(String[] args) {
Main m = new Main();
m.println(null);
} public void println(char x[]) {
System.out.println("char x[]");
} public void println(String x) {
System.out.println("String ");
} public void println(Object x) {
System.out.println("Object");
}
}这个例子是有错误的,但是你把public void println(char x[]) 或public void println(String x)中的一个去掉就可以了。
编译器会进行最接近类型的匹配。
[]) 和 java.io.PrintStream 中的 方法 println(java.lang.String) 都匹配