我目前正在阅读《Thinking In Java》,遇到了一个小问题。我正在做第8章的第12个练习。
创建一个至少有一个方法的接口,放在自己的包中。创建一个类并放在另一个包中。添加一个实现该接口的受保护内部类。在第三个包中从你的类继承,在一个方法中返回一个受保护的内部类的对象,并在返回时向上转型为接口类型。
因此,我创建了这些.java文件:
A.java
我的 NetBeans IDE 下划线标记了
创建一个至少有一个方法的接口,放在自己的包中。创建一个类并放在另一个包中。添加一个实现该接口的受保护内部类。在第三个包中从你的类继承,在一个方法中返回一个受保护的内部类的对象,并在返回时向上转型为接口类型。
因此,我创建了这些.java文件:
A.java
package c08;
public interface A
{
void one();
}
Pr2.java
package c082;
import c08.*;
public class Pr2
{
protected class InPr2 implements A
{
public void one() {System.out.println("Pr2.InPr2.one");}
protected InPr2() {}
}
}
Ex.java
package c083;
import c082.*;
import c08.*;
class Cl extends Pr2
{
A foo()
{
InPr2 bar=new InPr2();
return bar;
}
}
我的 NetBeans IDE 下划线标记了
InPr2();
并表示:InPr2()在C082.Pr2.InPr2中具有受保护的访问权限,我想知道为什么。 如果我没有明确声明InPr2构造函数应该是受保护的,那么它只能在C082包中访问,但是当我继承类Pr2时,应该在类Cl中可用,因为InPr2是受保护的吗?当我将构造函数更改为public时,一切正常。