Java内部类和继承

And*_*rew 7 java inheritance

我正在阅读Thinking In Java,我遇到了一个小问题.我正在从第8章开始练习12.

在自己的包中创建一个至少包含一个方法的接口.在>单独的包中创建一个类.添加一个实现接口的受保护内部类.在第三个>包中,继承自您的类,并在方法内部返回protected> inner类的对象,在返回期间向上转换为接口.

所以我创建了这些.java文件:

A.java

    package c08;
    public interface A
    {
        void one();
    }
Run Code Online (Sandbox Code Playgroud)

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() {}
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ex.java

    package c083;
    import c082.*;
    import c08.*;
    class Cl extends Pr2
    {
        A foo() 
        {
            InPr2 bar=new InPr2();
            return bar;
        } 
    }
Run Code Online (Sandbox Code Playgroud)

我的NetBeans IDE强调了这一点

    InPr2();
Run Code Online (Sandbox Code Playgroud)

并说:InPr2()在C082.Pr2.InPr2中有受保护的访问权限,我想知道为什么.如果我没有明确声明InPr2中的构造函数应该受到保护,它只能在C082包中访问,但是当我继承类Pr2时,它不能在类Cl中可用,因为InPr2受到保护吗?当我将构造函数更改为public时,一切都很好.

cor*_*iKa 2

它应该像你拥有的那样工作得很好,除了将 更改protected InPr2() {}public InPr2() { }. 换句话说,“任何人都可以实例化这个类,只要他们一开始就能看到这个类。”