内部类的继承

因为内部类的构造器必须连接到指向其外围类对象的引用,所以在继承内部类的时候,情况会变得有些复杂。问题在于,那个指向外围类对象的“秘密的”引用必须被初始化,而在导出类中不在存在可连接的默认对象。要解决这个问题,必须使用特殊的语法来说清它们之间的关联。

 1 //外部类
 2 class Outer{
 3     //内部类
 4     public Outer(){
 5         System.out.println("Outer初始化");
 6     }
 7     class Inner{
 8     }
 9 }
10 //inheritInner继承自内部类Inner
11 public class InheritInner extends Outer.Inner{
12     /*
13      * 此时:这个子类的构造方法InheritInner(){}不能够编译通过,需要写成下面的形式
14      */
15     public InheritInner(Outer outer) {
16         outer.super();
17     }
18
19     /**
20      * @param args
21      */
22     public static void main(String[] args) {
23         Outer outer=new Outer();
24         InheritInner inheritInner=new InheritInner(outer);
25     }
26
27 }

可以看到,InheritInner只是继承自内部类,而不是外部类。但是当要生成一个构造器时,默认的构造器并不被看好,而且不能只是传递一个指向外围类对象的引用。此外,必须在构造器内使用这样的语法:外部类引用.super()对这个秘密的外部类引用进行初始化,这样才提供了必要的引用,然后程序才能编译通过。

时间: 2024-10-03 23:07:37

内部类的继承的相关文章

20、内部类的继承

package com.lei.duixiang; /** * --内部类的继承-- * 在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法 * 并且该构造方法的参数需要为需要继承内部类的外部类的引用时 * 同时在构造方法体中使用 a.super() 语句,这样才为继承提供了必要的对象引用 * @author Administrator * */ public class OutputInnerClass extends ClassA.ClassB { //继承 内部类 ClassB

“全栈2019”Java第九十九章:局部内部类与继承详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九十九章:局部内部类与继承详解 下一章 "全栈2019"Java第一百章:局部内部类可以实现接口吗? 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小

Java内部类的继承

Java内部类的构造器必须连接到指向其外围类对象的引用(构造内部类必须给它一个外部类对象的引用,内部类依赖于外部类对象),所以在继承内部类的时候,需要在导出类的构造器中手动加入对基类构造器的调用. 因为,在导出类实例化时,并不存在一个外围类对象,以让导出类的实例去连接到它. 所以,我们需要创建一个外围类,然后用一个特定的语法来表明内部类与外围类的关系. 在下例子中,需要给导出类InheritInner一个来自内部类的外围类中的引用.普通的继承,只需在导出类构造器中加入super();,而内部类则

Java编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)

1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口.为取得此效果,需要在新类中嵌入一个现有类的private对象.但有时,允许类的用户直接访问新类中的组合成分是极具意义的,即将成员对象声明为public.如果成员对象自身都隐藏了具体实现,那么这种做法是安全的.当用户能够了

黑马程序员——JAVA学习笔记四(继承、接口、内部类)

1,    通过extends关键字让类与类之间产生继承关系.多个类中存在相同属性和行为时,将这些内容抽取到单独的一个类中,那么多个类无需定义这些属性和行为,只要继承那个类即可,已存在的类叫做超类,基类,或父类.新类称为子类,派生类,孩子类. 子类可以直接访问父类中的非私有的属性和行为.子类无法继承父类中私有的内容.JAVA不支持多继承,只支持单继承,多实现. 继承提高了代码复用性,让类与类之间产生了关系.为多态提供了前提. 2,    super关键字代表父类中成员变量内存空间的标示.两个作用

Java基础笔记-继承、抽象类、接口、多态、内部类、异常

继承:多个类具有相同的属性和行为时,将这些内容单独抽取到一个单独的类中,那么多个类无需再定义这些属性和行为,直接继承那个类即可 1)  多个类称为子类,单独的类称为父类或者超类 2)  子类可以继承父类中非私有的属性和方法 3)  通过extends关键字让类与类之间建立继承关系 4)  继承的出现提高了代码的复用性,让类与类之间产生了关系,为多态的出现提供了前提 5)  不能为了实现某类的功能,简化代码而继承,必须是类与类之间具有所属关系才可以继承,所属关系:is a 6)  特点:java只

java基础内部类(毕向东老师)

内部类//特点:内部类可以直接访问外部类的成员,//外部类要访问内部类中的成员必须创建内部类的对象. //为什么要定义内部类呢?类是用于描述事物的,而事务中如果还有具体的事物,而且这个内部的事物在访问着所属事物中的内容,这时这个内部的事物,也需要用到类来描述.这个类就是内部类.为什么内部类可以直接访问外部类的成员?因为内部类都持有一个外部类的引用.外部类名.this. static class Inner{int num=5;void method(){{int num=6;System.out

自学java 第十章内部类(三)

前两天学校断网,没能及时写,今天总结一下所学的内部类的剩余部分. 1.声明为static的内部类一般称为嵌套类.普通的内部类对象隐式地保存了一个引用,指向一个创建它的外围对象,而内部类为static时则不是这样: (1).要创建static内部类的对象,并不需要其外围类对象: (2).不能用static内部类的对象访问非静态的外围类对象. 类可以在接口中创建,但都自动是public和static类型的,甚至可以在一个接口的内部类中实现该接口. 2.使用内部类的原因:(1).因为内部类允许继承多个

黑马程序员——Java基础---多态、内部类、异常、包

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.多态 多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单的说,就是一句话:允许将子类类型的对象赋值给父类类型的引用. 猫这个对象对应的类