我目前正在阅读《用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() { }之外,它应该可以正常工作。换句话说:“只要他们看到该类开始,任何人都可以实例化该类。”

10-08 01:41