`
eimhee
  • 浏览: 2115745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

继承内部类的构造器问题

 
阅读更多
代码如下:
  1. class Car {
  2.   class Wheel {
  3.   }
  4. }
  5. class PlaneWheel extends Car.Wheel {
  6.   PlaneWheel(Car car) {
  7.     car.super(); // 这句什么意思?为什么要这样写?
  8.   }
  9.   public static void main(String[] args) {
  10.     Car car = new Car();
  11.     PlaneWheel pw = new PlaneWheel(car);
  12.   }
  13. }
调用的是 Car.Wheel 的构造器
因为 你这个类,是集成自 Car.Wheel而不是 Car.
同样,因为你不是单纯的集成子Wheel,所以你必须有一个Car的实例,因为Wheel属于Car。

以下的几种情况都是错误的
  1. class Car {
  2.   class Wheel {
  3.     Wheel(int id) { // 不再有默认无参数构造器
  4.     }
  5.   }
  6. }
  7. class PlaneWheel extends Car.Wheel {
  8.   PlaneWheel(Car car) {
  9.     car.super(); // 这里会出现编译错误
  10.   }
  11.   public static void main(String[] args) {
  12.     Car car = new Car();
  13.     PlaneWheel pw = new PlaneWheel(car);
  14.   }
  15. }
不写调用
  1. class Car {
  2.   class Wheel {
  3.   }
  4. }
  5. class PlaneWheel extends Car.Wheel {
  6.   PlaneWheel(Car car) { // 不写调用,也会出现编译错误
  7.    
  8.   }
  9.   public static void main(String[] args) {
  10.     Car car = new Car();
  11.     PlaneWheel pw = new PlaneWheel(car);
  12.   }
  13. }
  1. class Car {
  2.   class Wheel {
  3.   }
  4. }
  5. class PlaneWheel extends Car.Wheel {
  6.   PlaneWheel(Car car) {
  7.     super();// 单纯的super,同样是错误的
  8.   }
  9.   public static void main(String[] args) {
  10.     Car car = new Car();
  11.     PlaneWheel pw = new PlaneWheel(car);
  12.   }
  13. }

分享到:
评论

相关推荐

    Java内部类的继承(全)

    主要介绍了Java内部类的继承,大家都知道JAVA内部类的构造器必须连接指向其外围类对象的引用,所以在继承内部类的时候,需要在导出类的构造器中手动加入对基类构造器的调用,需要的朋友可以参考下

    Java提高篇之详解匿名内部类

    在java提高篇—–详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以衍生出这篇博客。在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始化匿名内部类...

    【05-面向对象(下)】

    •匿名内部类不能是抽象类,匿名内部类不能定义构造器。 Lambda表达式入门 •Lambda表达式主要作用就是代替匿名内部类的繁琐语法。它由三部分组成:  –形参列表。形参列表允许省略形参类型。如果形参...

    JAVASE.面向对象(1)

    面向对象基础内容1面向对象的概念1.1类的定义格式1.2如何通过类创建对象1.3封装1.3.1封装的步骤1.4构造器1.4.1构造器的作用1.5this关键字...继承后的特点构造器3抽象类3.1抽象类的概念3.2抽象类的注意事项3.3设计模式...

    java编程练习题

    2.无参构造器,将height和width都初始化为1.0 3.构造器,对height和width进行初始化 4.构造器,对x、y、height、width进行初始化 5.draw()方法,输出"draw in rectangle"和x,y,height,width的值 使用ShapeTest类...

    javaSE代码实例

    10.4.2 自定义构造器需要注意的问题 185 10.4.3 不能继承构造器 186 10.4.4 调用兄弟构造器 187 10.5 单列模式 189 10.6 Java程序的加载过程 190 10.7 小结 192 第三篇 高级基础篇 第11章 异常处理...

    Java-liaotian.rar_run

    一个Java聊天程序服务端和客户端程序,C/S结构,ChatServer 类实现了一个聊天室服务器端, 此类有一个构造器, 在构造器中使用newServerSocket()建立一个Socket 连接。RunServer()方法中运行聊天服务,通过Socket 类...

    C++编程思想习题

    第15章 模板和包容器类 15.1包容器和循环子 15.2模板综述 15.2.1C方法 15.2.2Smalltalk方法 15.2.3模板方法 15.3模板的语法 15.3.1非内联函数定义 15.3.2栈模板(thestackasatemplate) 15.3.3模板中的常量 15.4...

    java内部学习笔记.docx

    3.7构造器 17 3.8 super()、super.和 this()、this. 18 3.9重载和重写 19 3.10继承 20 3.11 static 23 3.12 final 24 3.13多态 25 3.14抽象类 25 3.15接口 25 3.16内部类 26 3.17匿名类 27 3.18二维数组和对象数组...

    Java聊天程序服务端和客户端程序

    一个Java聊天程序服务端和客户端程序,C/S结构,ChatServer 类实现了一个聊天室服务器端, 此类有一个构造器, 在构造器中使用newServerSocket()建立一个Socket 连接。RunServer()方法中运行聊天服务,通过Socket 类...

    Java 面向对象笔记

    Java面向对象笔记 Java面向对象知识点分成7部分:对象类、继承多态、构造器、类包内外访问权限、各种静态内部类、抽象函数、接口

    21天学通Java-由浅入深

    202 10.3.3 父子类间的构造器的调用流程 204 10.3.4 如何自定义构造器 207 10.4 什么是单子模式 208 10.5 构造器在程序中是何时运行的 211 10.6 综合练习 214 10.7 小结 215 10.8 习题 215 第11章 异常处理(精彩...

    Java复用、多态&接口

     当创建一个导出类的对象时,该对象包含一个包装在导出类对象内部的基类对象,所以java会自动的在导出类的构造器中插入对基类构造器的调用(super),在构造过程中是从基类“向外”扩散。  带参数的构造器:  ...

    Java Object实例代码

    Java Object实例代码 Java Object知识点分成7部分:对象、继承多态、构造器、类包内外访问权限、各种静态内部类、抽象函数、接口

    Java语言面向对象上册教程

    12.构造方法/构造器 41 13. this 47 14.面向对象的三大特征 51 14.1 封装性 51 14.2 设计模式-单例模式 63 14.3 static 67 14.4 单一原则 75 14.5 开闭原则 75 14.6 继承性 76 14.7 子类对象的初始化过程 83 14.8 ...

    Java 基础核心总结 +经典算法大全.rar

    类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...

    day020-继承加强和设计模式代码和笔记.rar

    建议用当前线程类的加载器方式获取流,线程安全问题 类加载器:( 扩展,5个月后会讲) 加载字节码的一个类而已: 1. 启动类加载器(Bootstrap classLoader) c++ 本地代码实现的类加载器,它...

    java 面试常问的问题 如何回答

    19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,...

    疯狂JAVA讲义

    6.8.3 枚举类的属性、方法和构造器 220 6.8.4 实现接口的枚举类 223 6.8.5 包含抽象方法的枚举类 224 6.9 对象与垃圾回收 225 6.9.1 对象在内存中的状态 226 6.9.2 强制垃圾回收 227 6.9.3 finalize方法 228 ...

Global site tag (gtag.js) - Google Analytics