java-多少外部**此**将具有此内部类?
作者:互联网
我有以下内部类的情况.
class Outer {
private class Inner1 extends InnerBase {
}
private class Inner2 extends InnerBase {
}
private class InnerBase {
}
}
通常,我认为内部类比外部类有一个额外的隐藏“ this”.
但是,但是将发生内部类是从另一个内部类派生的吗?
所有内部类(Inner1,Inner2,InnerBase)都应该有一个附加的类.
Inner1,Inner2对外部this有自己的引用吗?
还是只是重复使用InnerBase中的一个,导致行为略有不同?
(隐藏此==指向外部类实例的引用)
解决方法:
在内部,层次结构中的每个非静态内部类都会对此有自己的引用.您可以使用javap进行确认
$javap -private Outer.Inner1
Compiled from "Outer.java"
class Outer$Inner1 extends Outer$InnerBase{
final Outer this$0;
private Outer$Inner1(Outer);
}
$javap -private Outer.InnerBase
Compiled from "Outer.java"
class Outer$InnerBase extends java.lang.Object{
final Outer this$0;
private Outer$InnerBase(Outer);
Outer$InnerBase(Outer, Outer$1);
}
顺便说一句,如果您确实想要,您可以利用一些晦涩的Java语法,使父类和子类之间的this $0成员具有不同的值.这是如何做:
public class Outer {
class InnerBase {
Outer innerBaseOuter() { return Outer.this; }
}
class Inner1 extends InnerBase {
public Inner1() {}
public Inner1(Outer parentOuter) {
parentOuter.super(); // set a different super in InnerBase
}
Outer innerOuter() { return Outer.this; }
}
public static void main(String[] args) {
Outer outer1 = new Outer();
Outer outer2 = new Outer();
Inner1 a = outer1.new Inner1();
System.out.println("Checking (a.base == a.inner) => "+
(a.innerBaseOuter() == a.innerOuter()));
Inner1 b = outer1.new Inner1(outer2);
System.out.println("Checking (b.base == b.inner) => "+
(b.innerBaseOuter() == b.innerOuter()));
}
}
运行得到的程序:
Checking (a.base == a.inner) => true
Checking (b.base == b.inner) => false
标签:inner-classes,java 来源: https://codeday.me/bug/20191101/1983664.html