Thinking in java 之:内部类的继承
来源:互联网 发布:潘家园配眼镜 知乎 编辑:程序博客网 时间:2024/05/22 06:48
因为内部类的构造器必须连接到指向其外围类对象的引用,所以在继承内部类的时候,事情会变得有点复杂。问题在于,那个指向外围类对象的“秘密的”引用必须被初始化。
class InnerOut {class Inner {public void print() {System.out.println("Inner");}}}public class InheritInner extends InnerOut.Inner {InheritInner(){} //编译失败InheritInner(InnerOut io) {io.super();// 必须有}public static void main(String[] args) {Inner i = new InnerOut().new Inner();i.print();}}
要理解这个问题就得先理解内部类,Inner是InnerOut的内部类,那么一般的用法 InnerOut.Inner inner = new InnerOut(). new Inner() ;
我们可以看出要想创建Inner的对象必须先创建InnerOut的对象之后才能创建Inner对象,那么现在你要用一个类InheritInner继承Inner类,在继承过程中构造方法会被调用,即使你不写也会调用默认构造方法,但问题出现了,在调用父类Inner构造方法时找不到InnerOut的对象, 所以就必须给InheritInner类的构造方法传入InnerOut对象再通过io.super();方法调用Inner的默认构造方法,因为这是创建对象的基本流程,所以这句话io.super();是必须的。
class InnerOut {public InnerOut() {System.out.println("create InnerOut");}class Inner {public Inner() {System.out.println("create Inner");}public void print() {System.out.println("Inner");}}}public class InheritInner extends InnerOut.Inner {InheritInner(InnerOut i) {i.super();// 必须有}public static void main(String[] args) {InheritInner ii = new InheritInner(new InnerOut());}}打印结果:
create InnerOut
create Inner
从上面得出结论:
在调用构造方法InheritInner(new InnerOut());的时候,首先会调用外部类的构造器,然后这里的i.super()调用的是内部类的默认构造器。
0 0
- Thinking in java 之:内部类的继承
- Thinking in Java之匿名内部类
- Thinking in java 之:内部类
- Thinking in java 之 内部类
- Thinking in Java:内部类
- Thinking in Java 内部类
- Thinking in java 内部类
- [Thinking in JAVA] 关于内部类的一些知识点
- (Thinking in Java)内部类的简单使用
- Thinking in Java 整理笔记:内部类
- thinking in java——内部类
- Thinking in Java:第十章-内部类
- java内部类的继承
- THINKING IN JAVA 读书笔记——内部类
- 第十章:内部类 《Thinking in java》学习笔记
- Thinking in Java 内部类访问外部类
- Thinking in Java---内部类及一个迭代器实例
- 【Thinking in Java笔记】为什么需要内部类
- 如何快速掌握一门新技术/语言/框架
- Java 将字节数组转化为16进制的多种方案
- SQL Server Join的使用
- NYOJ_98 成绩转换
- 动画特效十二:发射器效果
- Thinking in java 之:内部类的继承
- 跑马灯 TextView效果设计
- 个人股东股权转让涉税问题初探
- 通过RS232和CAN的bootloader能凑合着下载了!!!
- 【HDOJ 4768】 Flyer (等差数列+二分)
- 产品经理的段位——说说腾讯的产品职级
- 线程(1)
- 泛型
- centos+nginx+c