「ThinkinginJava」を読んで、Inner Classesの章のex:6にとどまりました。
演習6:(2)独自のパッケージで、少なくとも1つのメソッドを使用してインターフェースを作成します。別のパッケージでクラスを作成します。インターフェイスを実装する保護された内部クラスを追加します。3番目のパッケージでは、クラスから継承し、メソッド内で、保護された内部クラスのオブジェクトを返し、戻り中にインターフェイスにアップキャストします。
これは私のコードです:
IOne.java
インターフェース
package intfpack;
public interface IOne{
void f();
}
COne.java
インターフェイスを実装する保護された内部クラスを持つクラス
package classpack;
import intfpack.*;
public class COne{
protected class Inner implements IOne{
public void f(){System.out.println("Inner class of COne");}
}
}
CTwo.java
保護された内部クラスを持つクラスからの継承
package thirdpack;
import classpack.*;
import intfpack.*;
public class CTwo extends COne{
public IOne getInner(){
IOne io = new Inner();
return io;
}
public static void main(String[] args){
CTwo ct = new CTwo();
ct.getInner();
}
}
コプミラーは次に言います:
javac CTwo.java
CTwo.java:9: Inner() has protected access in classpack.COne.Inner
IOne io = new Inner();
^
1 error
しかし、この本には、派生クラスの保護された内部クラスにアクセスできると書かれています。間違いはどこにありますか?