本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

将执行哪个重载方法以及为什么?[复制]

发布于2023-09-25 20:21     阅读(986)     评论(0)     点赞(22)     收藏(1)


public class NullDemo {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    NullDemo n = new NullDemo();
    n.execute(null);

}

public void execute(Object o) {
    System.out.println("object");
}

public void execute(Double o) {
    System.out.println("double");
}
 }

我已经执行了上面的代码,并且它使用execute(Double o)执行该方法。我需要知道它执行execute(Double o)而不是execute(Object o)的原因

并假设

 public class NullDemo {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    NullDemo n = new NullDemo();
    n.method1(null); /// give the compilation error

}

public void method1(Float o) {
    System.out.println("object");
}

public void method1(Double o) {
    System.out.println("double");
}
}

如果我将方法设置为 public void method1(Float o) 和 public void method1(Double o) ,它将给出编译错误,为什么会这样?这与等级制度有关吗?


解决方案


Java 会更喜欢调用继承树最下面的方法。考虑以下情况:

class Demo {

    public void doSomething(ParentClass foo) {
        //.....
    }

    public void doSomething(ChildClass foo) {
        //.....
    }

    public static void main() {
        Demo demo = new Demo();
        demo.doSomething(new ChildClass());
    }    
}

在上述情况下,方法调用可以匹配这两个方法中的任何一个。不过,直观上你可以看出,它应该与第二种方法相匹配。

您可以阅读java规范中的确切行为: http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/677413/e5c95dcd9ac63438928f/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)