Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何定义继承内部类的子类的构造函数?_Java_Inheritance_Constructor_Inner Classes_Outer Classes - Fatal编程技术网

Java 如何定义继承内部类的子类的构造函数?

Java 如何定义继承内部类的子类的构造函数?,java,inheritance,constructor,inner-classes,outer-classes,Java,Inheritance,Constructor,Inner Classes,Outer Classes,我正在用Java学习内部和外部类。我知道什么是内部类和外部类,以及为什么使用它们。关于这个话题,我遇到了以下问题,但找不到答案 假设给出了以下代码: class outer{ class inner{ } } class SubClass extends outer.inner{ } 问题:如何定义最小子类构造函数?为什么 Option 1- Subclass () { //reason: bacause the default constructor must a

我正在用Java学习内部和外部类。我知道什么是内部类和外部类,以及为什么使用它们。关于这个话题,我遇到了以下问题,但找不到答案

假设给出了以下代码:

class outer{
    class inner{

    }
}

class SubClass extends outer.inner{
}
问题:如何定义最小子类构造函数?为什么

Option 1-
Subclass () {
    //reason: bacause the default constructor must always be provided
}
Option 2-
Subclass (Outer outer) {
    //reason : because creating an instance of **Subclass** requires an instance 
    //of outer, which the **Subclass** instance will be bound to
}

Option 3-
Subclass (Outer outer) {
    outer.super();
    //reason : because creating an instance of **Subclass** requires an explicit 
    //call to the **Outer's** constructor, in order to have an enclosing instance 
    //of **Outer** in scope.
}
Option 4- 
Subclass (Outer.inner inner) {
    //reason : bacause an instance of **inner** is necessary so that there is a 
    //source to copy the derived properties from
}
这是一道选择题。预计只有一个答案

我是java新手,对这些高级主题不太了解


感谢

这里有一个来自的示例,它遵循相同的逻辑,但不传递封闭实例,而是直接在构造函数中创建它:

示例8.8.7.1-1。限定超类构造函数调用

超类构造函数调用可以细分为:

  • 非限定超类构造函数调用以关键字super开头 (可能以显式类型参数开头)

  • 限定超类构造函数调用以主 表情

它们允许子类构造函数显式指定新的 已创建对象的直接封闭实例(相对于 直接超类(§8.1.3)。当超类 是一个内部类

建议答案中最接近的情况是

public SubClass(Outer outer) {
    outer.super();
}
要扩展
Outer.internal
的内部类
Outer
子类
构造函数需要有一个
Outer
的实例,该实例是封闭类型

outer.super()
将调用
外部
父类的构造函数,该父类是
内部
构造函数。

outer.super()语法可能会令人不安,因为我们通常不会对构造函数的参数调用
super()
,但是在类扩展内部类的情况下,子类的构造函数允许这种语法。

我不认为“外部”类可以扩展内部类。这种构造意味着,一个类可以访问另一个类的私有成员

不过,您可以有一个内部类,它扩展了同一外部类的另一个内部类

对于构造函数,外部实例在实例化中指定,而不是作为参数:

class Outer {
   class Inner {
      ...
   }
   class SubInner {
      ...
   }
   void method() {
      Inner i = this.new SubInner();
   }
}

我不相信上面的任何一个,这是一个例子。您的类
Outer
是否有一个名为
super()
的方法?除非它这样做,
super
是一个保留字(一种语言构造),保留给超类构造函数的调用,因此不能用类或实例标识符限定它……如果它编译,请查看字节码,并告诉我:它是在(隐式)之前还是之后运行超级构造函数调用?你没有任何理由就投了否决票。你说它不会编译,然后你改变主意,然后你仍然改变你的论点。请不要这么咄咄逼人。@Usagi Miyamoto超级构造函数作为最后一条JVM语句被调用:
invokespecial#14//Method Outer$inner.“:(L/Outer;)V
@davidxxx。这类代码的可能应用是什么?有什么提示吗?
class Outer {
   class Inner {
      ...
   }
   class SubInner {
      ...
   }
   void method() {
      Inner i = this.new SubInner();
   }
}