方法重写传递null对象

时间:2013-05-18 17:28:08

标签: java

我无法理解为什么这个程序打印字符串

class AA {

    void m1(Object o) {
        System.out.println("Object ");
    }

    void m1(String o) {
        System.out.println("String ");
    }
}

public class StringOrObject {

    public static void main(String[] args) {
        AA a = new AA();
        a.m1(null);
    }
}

请帮助我了解这是如何打印Sting而不是Object

2 个答案:

答案 0 :(得分:3)

Dave Newton的评论是正确的。对该方法的调用将转到最具体的可能实现。另一个例子是:

class Foo {}
class Bar extends Foo {}
class Biz extends Bar {}


public class Main {

    private static void meth(Foo f) {
        System.out.println("Foo");
    }

    private static void meth(Bar b) {
        System.out.println("Bar");
    }

    private static void meth(Biz b) {
        System.out.println("Biz");
    }


    public static void main(String[] args) {
        meth(null); // Biz will be printed
    }
}

答案 1 :(得分:0)

这将尝试拨打最具体的电话。在这种情况下,子类对象获取首选项,即String。