Java:如何在不同文件中继承非静态内部类
如何让顶级类继承非静态内部类(不修改内部类为静态)
现有代码结构如下:
class A { class B { } }需要让另一个顶级类
C继承B,且不能将B设置为静态类。
非静态内部类B的实例必须绑定到外部类A的实例上,因此继承B的顶级类C需要在构造时显式关联一个A的实例,具体实现如下:
1. 定义继承A.B的顶级类C
class C extends A.B { // 构造方法接收A的实例,用于初始化父类B public C(A a) { a.super(); // 核心:通过外部类实例调用内部类的构造方法 } }
2. 创建C实例的方式
要创建C的对象,必须先实例化A,再把A的实例传入C的构造方法:
public class Main { public static void main(String[] args) { A aInstance = new A(); C cInstance = new C(aInstance); } }
原理说明
非静态内部类B的构造方法默认会隐式持有外部类A的引用,当子类C继承B时,必须显式提供这个A的实例,通过a.super()的语法完成父类B的初始化,这样C的实例就和传入的A实例绑定,既满足非静态内部类的依赖要求,又不需要修改B为静态类。
内容的提问来源于stack exchange,提问作者kaka
相关产品推荐
相关产品推荐

