内部类继承
来源:互联网 发布:mac 10.10.5 升级包 编辑:程序博客网 时间:2024/05/16 18:24
定义一个内部类时,这个内部类会有一个隐式引用(implicit reference)指向外部类的实例。例如下面的代码:
- class WithInner {
- class Inner {}
- }
Inner
默认会有一个带参数的构造函数,我们通过反射来看一下。- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- class WithInner {
- class Inner {
- public void getConstructors() {
- for (Constructor<?> cons : getClass().getDeclaredConstructors()) {
- StringBuilder sb = new StringBuilder();
- sb.append("constructor: ").append(cons.getName()).append("(");
- for (Class<?> param : cons.getParameterTypes()) {
- sb.append(param.getSimpleName()).append(", ");
- }
- if (sb.charAt(sb.length() - 1) == ' ') {
- sb.replace(sb.length() - 2, sb.length(), ")");
- } else {
- sb.append(')');
- }
- System.out.println(sb);
- }
- }
- }
- }
- public class InheritInner {
- public static void main(String[] args) {
- WithInner wi = new WithInner();
- WithInner.Inner i = wi.new Inner();
- i.getConstructors();
- }
- }
constructor: WithInner$Inner(WithInner)
从结果可以看出参数的类型就是就是外部类(outer class),也就是说,构造内部类的时候,必须要给它一个外部类的引用。接下来我们让
InheritInner
继承WithInner.Inner
。- class WithInner {
- class Inner {}
- }
- public class InheritInner extends WithInner.Inner {
- public static void main(String[] args) {
- }
- }
InheritInner.java:5: an enclosing instance that contains WithInner.Inner is requiredpublic class InheritInner extends WithInner.Inner { ^1 error
报错信息提示我们InheritInner
需要一个WithInner
实例。
那我们给InheritInner
加上我们反射出的带参数的构造函数。照样编译通不过,而且会报同样的错误。这是因为语法规定:在继承内部类的时候,在构造函数中必须要添加enclosingClassReference.super()
。
- class WithInner {
- class Inner {}
- }
- public class InheritInner extends WithInner.Inner {
- public InheritInner(WithInner wi) {
- wi.super();
- }
- public static void main(String[] args) {
- WithInner wi = new WithInner();
- InheritInner ii = new InheritInner(wi);
- }
- }
0 0
- 继承内部类
- java继承内部类
- java继承内部类
- Java 内部类继承
- 继承内部类
- 内部类继承
- Java 继承内部类
- java 继承 内部类
- 内部类的继承-内部类
- 内部类(多继承)
- 内部类实现多重继承
- 怎样继承一个内部类
- 内部类实现多重继承
- 内部类实现多继承~
- java内部类的继承
- 内部类——内部类的继承
- Java内部类+匿名内部类详解+内部类实现多重继承
- 从内部类继承 内部类被覆盖 内部类生成的class文件名
- 1043. 输出PATest(20)
- 余弦计算相似度度量(优秀)
- 使用CocoaPods一直停留在:Updating local specs repositories
- 安装Ubuntu后要做的事
- C++学习笔记--GCC编译过程
- 内部类继承
- vs2010下release版本调试设置
- SSAS(分析服务)优化手册
- 第21章 动态链接库
- 排序算法(持续更新...)
- Django 源码小剖: 初探 WSGI
- TCP校验和算法
- fastjson其他常用方法
- 黑马程序员_java集合框架的一些总结