首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承时无法访问受保护的内部类

继承时无法访问受保护的内部类
EN

Stack Overflow用户
提问于 2009-09-28 15:34:13
回答 4查看 8.9K关注 0票数 14

通过阅读“Java思考”,我坚持在ex:6的内部类章节。

练习6:(2)在自己的包中创建至少一个方法的接口。在一个单独的包中创建一个类。添加实现接口的受保护的内部类。在第三个包中,从类继承,并在方法中返回受保护的内部类的对象,并在返回期间向上转换到接口。

这是我的密码:

IOne.java

接口

代码语言:javascript
复制
package intfpack;
public interface IOne{
        void    f();
}

COne.java

具有实现接口的受保护的内部类的

代码语言:javascript
复制
package classpack;
import intfpack.*;
public class COne{
        protected class Inner implements IOne{
                public void f(){System.out.println("Inner class of COne");}
        } 
}

CTwo.java

用受保护的内部类从类继承

代码语言:javascript
复制
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();
        }
}

科普米勒接着说:

代码语言:javascript
复制
javac CTwo.java
CTwo.java:9: Inner() has protected access in classpack.COne.Inner
                IOne io = new Inner(); 
                          ^
1 error

但书中说,我可以访问派生类中受保护的内部类。错误在哪里?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-28 15:43:41

错误消息是在抱怨构造函数受到保护,而不是类。但是,您还没有在发布的代码中显式定义构造函数。在本例中,根据JLS将保护默认构造函数(与类相同)。

票数 24
EN

Stack Overflow用户

发布于 2009-09-28 15:54:10

您需要为public class定义一个class构造函数。

代码语言:javascript
复制
public class COne {

    protected class Inner implements IOne{

        public Inner() { }

        public void f(){System.out.println("Inner class of COne");}
    }
}
票数 9
EN

Stack Overflow用户

发布于 2009-11-10 23:03:20

这很明显。但这里有件很奇怪的事。

根据JLS如果CTwo扩展了COne.Inner,则预期它将访问COne.Inner的受保护构造函数,但实际上它不.见下文。

代码语言:javascript
复制
package p1;
public class COne {
    public static class Inner {
        protected Inner() {}
    }
}

package p2;
public class CTwo extends COne.Inner {
    public void getIface() {
        new COne.Inner();
        // Compile time error anyway with the same complains:
        // "Inner() has protected access in p1.COne.Inner"
        // ...unlike my expectations...
    }
}  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1487734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档