我正在阅读有关内部类继承的内容,但我一直试图理解下面的代码是如何工作的:
class Outer{
class Inner{
}
}
class Derived extends Outer.Inner{
Derived(Outer o){
o.super();
}
}
据我所知,关键字super指的是超类,super()指向它的无参数构造函数。在Outer类的情况下,超类是Object类。
我想了解这段代码的工作原理。
为什么实例化Object类可以扩展内部类?
创建Object类实例与创建外部类对象有什么关系?
删除包含“o.super();”的行导致错误:
java:需要包含p.Outer.Inner的封闭实例
我读过很多文章,但我无法弄清楚它是如何运作的 我会很乐意回答。
答案 0 :(得分:2)
假设您有一个变量xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
};
xhttp.open("GET", "http://dashboard.monitis.com/sharedPage.jsp?bla..bla", true);
xhttp.send();
引用o
的实例,并且您希望创建一个Outer
实例,其封闭实例为Inner
的值。你可以打电话:
o
在Java中很少见到(因为通常在构造内部类时,使用“this”作为隐式封闭实例),但它是有效的。
这实际上相当于它,但是在子类构造函数的上下文中。 Outer.Inner inner = o.new Outer.Inner();
类真的有一个像这样的构造函数:
Inner
...此行有效地调用
Inner(Outer enclosingInstance)
...只是它没有用语法表达来区分这种“特殊”信息和任何常规参数。
答案 1 :(得分:1)
为什么实例化Object类会使扩展内部类成为可能?
在Inner实例中需要一个外部实例作为内部实例。没有它的外部实例,没有它是没有意义的。如果拥有一个没有外部的内部确实有意义,你可以使它成为static
创建Object类实例与创建外部类对象有什么关系?
在创建内部实例之前,您需要一个外部实例。
我阅读了很多文章,但我无法弄清楚它是如何运作的。
它将Outer
实例设置为Inner
超类所需。
答案 2 :(得分:1)
类Inner
被称为嵌套内部类,并且绑定到Outer类,以便初始化它需要使用Outer类的实例,如Outer.Inner inner = (new Outer()).new Inner();
如果您的内部类是使用static修饰符声明的,那么它将是一个静态嵌套类,并且初始化它的新实例时不需要Outer类的实例,如下所示:Outer.Inner inner = new Outer.Inner();
答案 3 :(得分:0)
您实例化内部类,如Outer outer = new Outer(); Inner inner = outer.new Inner();