【问题标题】:Checking With String and Object [duplicate]使用字符串和对象检查 [重复]
【发布时间】:2015-05-22 13:32:01
【问题描述】:

代码如下:

public class OverloadingByObject {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Object object = null;
        new OverloadingByObject().SayHi(null);
        new OverloadingByObject().SayHi(object);
    }

    public void SayHi(String str) {

        System.out.println("String called");
    }

    public void SayHi(Object obj) {

        System.out.println("Object called");
    }
}

当我传递 null 时,它应该调用 Object 的方法。调用String方法的原因是什么?

【问题讨论】:

    标签: java string oop object core


    【解决方案1】:

    null 可以分配给任何引用类型。在决定调用哪个方法的重载版本时,会选择具有最具体参数的方法。 StringObject 更具体(因为 StringObject 的子类)。因此,SayHi(String str) 被称为 null 参数。

    【讨论】:

    • 所以你确定它会更喜欢第一个子类方法。
    • @Krishna 它会更喜欢具有最具体参数类型的方法。但是,如果您添加另一个方法,例如 SayHi(Integer i),则调用 SayHi(null) 将无法通过编译,因为 Integer 和 String 都不比另一个更具体。
    • 运行这个例子我得到“对象调用”两次。
    • @user987339 奇怪,我收到了String called Object called,这是预期的行为。
    • 可以贴到ideone上吗?
    猜你喜欢
    • 1970-01-01
    • 2018-06-03
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2015-01-22
    • 2018-10-17
    • 2019-10-01
    相关资源
    最近更新 更多