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‘类对象时,"other reference“是如何打印的。阐述“S”类对象如何与" object“类兼容的实际机制。
发布于 2011-03-22 20:31:48
每个类都有java.lang.Object作为父类-即使您不编写extends Object,编译器也会自动添加它。引用the javadoc
类对象是类层次结构的根。每个类都有作为超类的对象。所有对象,包括数组,都实现这个类的方法。
S显然是存在的,否则它不会编译。然后,编译器选择最具体的方法来调用。S既不匹配Z签名,也不匹配A签名,它匹配Object签名。
发布于 2011-03-22 20:30:17
每个类都是java.lang.Object的子类,即使您没有显式地扩展它。
发布于 2011-03-22 20:31:32
S是Object的一种类型,因为Java中的每个类都是Object的子类。当Java搜索重载 fun()的合适方法时,fun(Object object)会匹配参数,因此它会被调用。
试着看看Java中的方法重载。
https://stackoverflow.com/questions/5391191
复制相似问题