通读“Thinking in Java”,我陷入了 Inner Classes 章节的 ex:6 中。
练习 6:(2) 在自己的包中创建一个至少包含一种方法的接口。在单独的包中创建一个类。添加实现接口的受保护内部类。在第三个包中,从您的类继承,并在方法内返回受保护的内部类的对象,在返回期间向上转换到接口。
这是我的代码:
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
但是这本书说我可以在派生类中访问受保护的内部类。错在哪里?