内部类与访问权限的问题

ThinkCat ThinkCat 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


package pkg1;
public interface Interface {...}

package pkg2;
import pkg1.*;
public class Base {
protected class BaseInner implements Interface{
//(1)
public BaseInner() {}
...
}
}


package pkg3;
import pkg1.*;
import pkg2.*;
public class SomeClass extends Base {
Interface getBaseInner() {
//(2)
return this.new BaseInner();
}
...
}



上述代码描述如下:在包pkg2中BaseInner为Base的内部类,并实现了包pkg1中接口Interface;包pkg3中的类SomeClass继承包pkg2中的Base,并定义了一个方法getBaseInner(),返回类BaseInner的对象,然后转型为pkg1中的接口Interface。

注意(1)处的public BaseInner() {},如果没有它,也就是使用默认构造器,那么(2)处的return this.new BaseInner();会报错,因为类BaseInner的权限protected导致了其在pkg3中不可见。

我的问题是,为什么让构造函数变成public,原本protected的类就可以被别的包所访问。我的理解是类被实例化的时候,调用的是构造函数,而这个构造函数把原本protected的权限扩大成了public。不知道大家什么看法?
...全文
评论 15
收藏 已收藏
分享
返回顶部
ThinkCat
Java SE 62,621 成员 307,251 内容