Java—内部类(三)—内部类的继承
来源:互联网 发布:中国移动积分兑换软件 编辑:程序博客网 时间:2024/05/23 02:01
内部类的继承
内部类和其他普通类一样,同样可以被继承,这样给本来就十分灵活的内部类增加了更好的结构性和代码复用性。只是内部类的继承和普通类有一些不同之处,是在使用时需要多加注意的。因为内部类在创建时需要外部类的引用,所以在内部类的继承上也需要外部类的协助。接下来看示例代码。
class WithInner{ class Inner{ }}public class test3 extends WithInner.Inner{ test3(WithInner wi){ wi.super(); } public static void main(String[] args){ WithInner wi = new WithInner(); test3 t3 = new test3(wi); }}
首先在继承语句extends处,注意命名空间,需要加上外围类名,才能对应上正确的内部类。其次是构造对象上,这里需要自己写一个接受外围类引用的构造器,来给导出类提供创建对象的基本环境。注意在构造器中的这一句wi.super()这是必须在构造器中使用的,才能够成功的构造出一个继承自内部类的对象。及enclosingClassReference.super()这个语法一定要牢记。
这是简单的默认构造器的继承,下面的示例难一点,题目是:创建一个包含内部类的类,此内部类有一个非默认构造器(需要参数的构造器)。创建另一个也包含内部类的类继承自第一个内部类。可以先自己试着写一下,看看哪里写的时候有问题,然后对照下面的示例有助于理解,与记忆。
class outer{ class inner{ public inner(String s){ System.out.println(s); } }}public class test{ class testInner extends outer.inner{ testInner(outer o){ o.super("Hello"); } } public static void main(String[] args){ outer o = new outer(); test t = new test(); testInner ti = t.new testInner(o);//创建内部类时需要外部类对象引用,才能成功创建 }}
和上面一例没有太大的区别,就是构造器带上了参数,其次是在内部类对象的创建上,需要先有一个外围对象然后用className.new 的语法进行创建,如果不清楚的可以看前面几篇关于内部类的创建的文章,有写。
以上就是内部类的继承了。既然说到了继承,很自然的就会联想到,内部类会被覆盖吗?
到一个外部类继承自另一个含有内部类的父类。然后在该类中重写了父类的内部类,这个时候会怎么样呢?父类的内部类会被覆盖吗?看下面代码,告诉你答案:
class Egg{ private Yolk y; protected class Yolk{ public Yolk(){ System.out.println("Egg.Yolk()"); } } public Egg(){ System.out.println("New Egg"); y = new Yolk(); }}public class BigEgg extends Egg{ public class Yolk{ public Yolk(){ System.out.println("BigEgg.Yolk"); } } public static void main(String[] args){ new BigEgg(); }}
输出如下:
New EggEgg.Yolk()
由输出可以看出,重写的内部类并没有被调用,说明了在不同的外围类中的内部类是相互独立的实体,他们存在于自己的命名空间中,如果想要实现覆盖的话,可以直接使用继承语法,将子类的内部类继承自父类的内部类,即可,这里就补贴出代码了,大家自己去试试。
- Java—内部类(三)—内部类的继承
- 内部类——内部类的继承
- JAVA内部类 (成员内部类、局部内部类、匿名内部类、静态内部类、内部类的继承))
- JAVA内部类 (成员内部类、局部内部类、匿名内部类、静态内部类、内部类的继承))
- java内部类的继承
- java继承内部类
- java继承内部类
- Java 内部类继承
- Java 继承内部类
- java 继承 内部类
- java—内部类
- Java—内部类
- 内部类的继承-内部类
- Java内部类(一)——匿名内部类
- java内部类(三)
- Java内部类(三)匿名内部类
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java继承内部类的问题
- 创建函数能够对整型数组进行二分查找。
- scp指令
- 如何在使用moveRowAtIndexPath:方法时替换默认图片
- java下载文件名乱码
- Android 自定义软键盘
- Java—内部类(三)—内部类的继承
- Python 的 yield 在 C++ 上的一种实现
- 《Unity_API解析》 第三章 GameObject类
- android应用版本升级时签名冲突问题的原因及解决办法
- 数据结构学习笔记(前言)
- PhalApi框架浅谈之融云扩展类库(PhalApi——RongYun)
- CRAN 的任务视图(View Task)
- linux常见命令
- Linux下NFS的配置