Java言語仕様 第3版にて

Java言語仕様 第3版 (The Java Series)
「4.4 型変数」の考察のコード(P.48)より.

class C {
    void mCDefault() {}
    public void mCPublic() {}
    private void mCPrivate() {}
    protected void mCProtected() {}
}
abstract class CT extends C implements I {}
interface I {
    void mI();
}
class D {
    <T extends C & I> void test(T t) {
	t.mI(); // 1.
	t.mCDefault(); // 2.
	t.mCPublic(); // 3.
	t.mCPrivate(); // 4.
	t.mCProtected(); // 5.
    }
}

これをコンパイルするとどうなるか?
結果は,件の本によると4.のmCPrivate以外はOKと書いてある.また,mCDefaultに関しては以下のような説明もある.

CがTとは別のパッケージ内で宣言されている場合,Tが宣言された場所からmCDefaultにアクセスできなくなるため,mCDefaultへの呼び出しによってコンパイル時のエラーが引き起こされる.

ふむふむと思い手元の環境で試してみた.

だが,手元の環境ではjdk1.6.0とjdk1.6.0_01だとその通りなのだが,jdk1.6.0_02だと2.mCDefaultもコンパイルエラーとなる.

$ java -version
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode, sharing)

$ javac C.java
C.java:16: シンボルを見つけられません。
シンボル: メソッド mCDefault()
        t.mCDefault();
         ^
C.java:18: シンボルを見つけられません。
シンボル: メソッド mCPrivate()
        t.mCPrivate();
         ^
エラー 2 個

これってバグ?