4

我无法理解为什么这个程序会打印String

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

4

2 回答 2

3

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

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
    }
}
于 2013-05-18T17:36:10.813 回答
0

这将尝试进行最具体的调用。子类对象在这种情况下获得首选项是字符串。

于 2013-05-18T17:32:50.647 回答