我目前正在阅读《用Java思考》,遇到一个小问题。我正在做第8章的练习12。
因此,我创建了以下.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() {}
}
}
范例程式库
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 protected 了吗?当我将构造函数更改为public时,一切都很好。
最佳答案
除了将protected InPr2() {}
更改为public InPr2() { }
之外,它应该可以正常工作。换句话说:“只要他们看到该类开始,任何人都可以实例化该类。”