在为算法编写解释性GUI时,我偶然发现了一些事情。
我完全理解为什么以下不起作用:
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
private class Subclass extends Superclass {
int someValue;
public Subclass () {
super (this.someValue);
this.someValue = 0;
}
}
子类尚未完全初始化,因此使用this
毫无意义。
我也理解为什么这不起作用:
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
public class OuterClass {
private class InnerSubclass extends Superclass {
int someValue;
public InnerSubclass () {
super (this.someValue);
this.someValue = 0;
}
}
// some code of OuterClass
}
这种情况不会因子类是内部类的唯一事实而改变。
我不明白为什么这不起作用:
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
public class OuterClass {
int someValue;
private class InnerSubclass extends Superclass {
public InnerSubclass () {
super (OuterClass.this.someValue);
}
}
public OuterClass () {
this.someValue = 0;
}
// some code of OuterClass
}
请注意,我使用的是OuterClass.this
,而不是this
的{{1}}。需要初始化外部类对象,以使内部类对象甚至可以创建。我能想到的唯一情况是,如果内部类是静态的,那么InnerSubclass
就不能被引用了。
知道为什么上面的代码仍会产生OuterClass.this
?