You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java父子类内部类访问:子类调用父类内部类protected权限是否足够?

问题1:子类内部访问父类定义的Inner内部类的方法

由于子类自定义了同名的Inner内部类,子类作用域内默认使用Inner时会优先指向子类自身的内部类,要访问父类的Inner需要显式添加父类类名限定:

  • 引用父类Inner类型的写法为 Parent.Inner
  • 非静态内部类的实例化必须绑定外部类的实例,示例代码如下:
public class Child extends Parent{
    protected class Inner{
    }

    public void test() {
        // 先创建父类实例
        Parent parentIns = new Parent();
        // 基于父类实例实例化父类的Inner类
        Parent.Inner parentInner = parentIns.new Inner();
    }
}
问题2:父类方法使用子类Inner作为入参的可行性

仅将Inner设置为protected访问权限无法实现该需求,核心原因如下:

  • 父子类的同名Inner是完全独立的两个类型,Parent.Inner和Child.Inner不存在默认的继承关系,父类方法myMethod(Inner inner)中的参数类型默认是Parent.Inner,和子类的Inner类型不兼容,无法直接接收子类Inner的实例。
  • 父类是继承结构中的上层抽象,编码阶段无法预知子类会定义的内部类,本身也不允许依赖子类的类型定义,所以不可能直接在父类方法的参数中声明子类的内部类类型。

如果要实现类似的参数兼容能力,需要先让子类的Inner显式继承父类的Inner,再配合泛型做参数适配,仅调整访问权限达不到目的。

内容的提问来源于stack exchange,提问作者BamDoya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:27:04