`
逆风的香1314
  • 浏览: 1439223 次
  • 性别: 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入门理解构造器

    - **使用`this`调用构造器**:在一个构造器内部,可以使用`this(参数列表)`来调用同一类中的另一个构造器。这种调用必须是构造器的第一条语句。 - **使用`super`调用父类构造器**:在一个构造器内部,可以使用`...

    Java内部类的继承(全)

    因此,在继承内部类时,必须在派生类的构造器中显式地调用基类构造器,并传入外部类的引用。 2. **super()调用**: - 在普通的类继承中,我们可以使用`super()`调用来调用父类的无参构造器。然而,对于内部类,...

    Java4Android 35_内部类和匿名内部类

    2. **局部内部类**: 定义在方法、构造器或块中的类被称为局部内部类。它的作用范围仅限于该方法、构造器或块。 3. **静态内部类**: 声明为static的内部类,称为静态内部类。它不持有对外部类的隐式引用,因此可以...

    Java内部类总结

    内部类的构造器可以访问外部类的构造器,但如果内部类不是静态的,则需要调用`super()`来完成对父类构造器的调用。例如: ```java class a0 { class b0 { } } class vvv { class ff extends a0.b0 { ff(a0 kk) ...

    java 内部类使用(内部匿名类)

    4. **局部内部类**:定义在方法、块或者构造器内部的类称为局部内部类。它们的作用域局限于定义它们的代码块,可以访问该代码块内的所有变量和参数,同样,对于局部变量,也需要满足final或等效于final的要求。 ...

    JAVA 内部类 PPT

    - **局部内部类**:定义在方法、构造器或块中的类称为局部内部类,它的作用域仅限于该方法、构造器或块。 - **匿名类**:没有名字的内部类,通常用于一次性实现某个接口或父类的简单功能。 2. **内部类继承** - ...

    内部类的分类及各自用法

    局部内部类是在方法或构造器的内部定义的类,它的作用域仅限于该方法或构造器内部。局部内部类可以访问方法或构造器中的所有局部变量,但这些变量必须声明为`final`(最终的)。局部内部类的主要用途是为某个特定的...

    第11章 内部类(Inner class).ppt

    - 局部内部类是在方法、构造器或初始化块内部定义的类。它们的作用域仅限于该方法或代码块,因此具有更高的封装性。 3. **匿名内部类**: - 匿名内部类没有名称,通常用于快速创建一次性使用的简单类,常用于实现...

    内部类示例源码

    接着,局部内部类是在方法、构造器或者代码块内部定义的类。它们的作用域仅限于定义它们的块,因此它们可以用来封装局部变量。局部内部类不能声明为静态,也不能有静态成员。由于其作用域的限制,它们通常用于实现...

    Java继承构造器使用过程解析

    Java继承构造器使用过程解析的主要内容是介绍了Java继承构造器的使用过程,包括默认构造器和带参数的构造器,以及在子类构造器中调用基类构造器来执行初始化的重要性。这些知识点对于学习Java编程语言的开发者非常...

    Java 匿名内部类

    匿名内部类可以有自己的构造器,但是它必须调用其超类的构造器,如果匿名内部类继承自一个类的话。 6. **作用域**: 匿名内部类可以访问其所在的作用域内的所有变量,包括final的局部变量。这是因为匿名内部类...

    关于内部类的整理 内部类.xmind

    局部内部类是定义在方法、构造器或者代码块内的类。它的作用域仅限于该方法、构造器或代码块,因此只能在这个范围内被使用。局部内部类不能访问外部类的非静态成员,除非通过对象实例。 3. 匿名内部类: 匿名内部...

    有关JAVA的内部类的好东西

    - **局部内部类**:定义在方法、构造器或块中的类,其作用域仅限于该方法、构造器或块。 - **匿名内部类**:没有名称的内部类,通常用于快速实现接口或抽象类的一个简短的、一次性版本。 - **嵌套接口**:虽然...

    java中的内部类

    2. 局部内部类:定义在方法、构造器或者块中的类被称为局部内部类。它们的作用域仅限于该方法、构造器或块,因此它们可以访问其所在范围内的所有局部变量。然而,局部内部类不能声明静态成员,因为它们的生命周期与...

    day08面向对象-内部类、异常.doc

    局部内部类是在外部类的某个方法或构造器中定义的内部类。这种内部类的作用域仅限于该方法或构造器。 ##### 特点 - 只能在定义它的方法中被使用。 - 局部内部类不能包含静态成员。 - 局部内部类可以访问所在方法的`...

    匿名内部类核心重点知识讲解和经典例子讲解

    - **定义方式**:匿名内部类可以直接在另一个类的内部或方法内部定义,没有类名,但可以有构造器。它可以通过继承一个类或实现一个接口来创建。 - **语法**:`new 类名/接口名() { // 实现部分 }` - **实例化**:...

    java内部类应用详解

    2. **局部内部类**:定义在方法、构造器或块内的类被称为局部内部类。它仅在该方法、构造器或块的范围内可见,不能被外部访问。局部内部类可以访问它所在的作用域内的所有变量,包括final修饰的局部变量。 3. **...

    java 集合和内部类资料

    2. 局部内部类:在方法、构造器或块中定义,仅在其定义范围内可见。 3. 匿名内部类:没有名字的内部类,通常用作接口的匿名实现或创建一次性使用的类。 4. 静态内部类:与成员内部类类似,但可以独立于外部类实例...

    深入解析Java中的内部类

    局部内部类是在方法、构造器或初始化块内部定义的类,它的作用域仅限于该方法、构造器或初始化块。局部内部类可以访问其所在作用域的所有局部变量,但这些变量必须是final的。由于其作用域限制,局部内部类常用于...

Global site tag (gtag.js) - Google Analytics