class A{}
class Z{}
class S{}
public class Demo6 {
void fun(A a){
System.out.println("A reference");
}
void fun(Z z){
System.out.println("Z reference");
}
void fun(Object o){
System.out.println("other reference");
}
public static void main(String args[]){
new Demo6().fun(new A());
new Demo6().fun(new S());
}
}
以上代码的输出即将来临:
参考
其他参考
我的困惑是当我们传递'S'类对象时,“其他引用”是如何打印的。详细说明'S'类对象如何与“对象”类兼容的实际机制。
答案 0 :(得分:5)
每个类都是java.lang.Object的子类,即使您没有显式扩展它。
答案 1 :(得分:2)
每个类都有java.lang.Object
作为父级 - 即使您不编写extends Object
,编译器也会自动添加它。引用the javadoc:
Class Object是类层次结构的根。每个类都有Object作为超类。所有对象(包括数组)都实现此类的方法。
S
显然存在,否则无法编译。然后编译器选择最具体的方法来调用。 S
与Z
和A
的签名不匹配,且与Object
签名不匹配。
答案 2 :(得分:0)
S 是一种对象,因为Java中的每个类都是Object的子类。 当Java为 fun()搜索合适的方法重载时, fun(Object object)匹配参数,因此会调用它。
尝试查看Java中的方法重载。