怎么继承一个非静态的内部类?

如果某些情况下,如要继承一个内部类,现实中可能不会有这种要求。
一个包含内部类的类

class WithInner {
     class Inner {
    }
}

我们这样直接继承好像会有错误的。

/错误信息:
//Multiple markers at this line
//- No enclosing instance of type WithInner is available due to some intermediate constructor invocation
//- Breakpoint:F
public class F extends WithInner.Inner {
    
}

大概意思需要一个引用外部类WithInner 的构造方法。我们修改如下,就能顺利通过编译。

public class F extends WithInner.Inner {
    public F(WithInner withInner) {
        withInner.super();
    }

}

实际上原理可以简单理解为,一个非静态内部类的实例必须有一个外部类的引用。
如果内部类是静态的,其实就不需要外部类的实例了。

class WithInner {
     static class Inner {
    }
}


public class F extends WithInner.Inner {


}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成...
    ikaroskun阅读 1,251评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,183评论 0 2
  • 一、继承 当两个事物之间存在一定的所属关系,即就像孩子从父母那里得到遗传基因一样,当然,java要遗传的更完美,这...
    玉圣阅读 1,071评论 0 2
  • 老马走了。 301探望后,曾经想过很多次周末有空时将外面的春意拍成照片,洗的大大的,像电影里情节一样,拿到...
    willyuan阅读 499评论 0 0