Java FAQ:継承関係のある引数のオーバーロードでどれが呼ばれるか?

Java FAQ:S011 Q-09

まんま

public class C2008042200 {
    static void foo(Object arg) {
        System.out.println("foo(Object arg)");
    }

    static void foo(String arg) {
        System.out.println("foo(String arg)");
    }

    public static void main(String[] args) {
        foo(null);
    }
}

で、

foo(String arg)


「継承関係のないクラス同士の場合は「参照はあいまいです」とコンパイルエラーになります」の意味が分からない…。
こういう↓ことか?(S011 Q-10 が、まさにそれ?)

public class C2008042230 {
    static void foo(Object arg) {
        System.out.println("foo(Object arg)");
    }

    static void foo(String arg) {
        System.out.println("foo(String arg)");
    }

    static void foo(StringBuffer arg) {
        System.out.println("foo(StringBuffer arg)");
    }

    public static void main(String[] args) {
        foo(null);
    }
}

で、

C2008042230.java:16: foo の参照はあいまいです。C2008042230 の メソッド foo(java.lang.String) と C2008042230 の メソッド foo(java.lang.StringBuffer) が両方適合します。
        foo(null);
        ^
エラー 1 個