java-多少外部**此**将具有此内部类?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-多少外部**此**将具有此内部类?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1670字,纯文字阅读大概需要3分钟。
内容图文
![java-多少外部**此**将具有此内部类?](/upload/InfoBanner/zyjiaocheng/675/e47473d05bbe43099476154d5d8df4df.jpg)
我有以下内部类的情况.
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
内容总结
以上是互联网集市为您收集整理的java-多少外部**此**将具有此内部类?全部内容,希望文章能够帮你解决java-多少外部**此**将具有此内部类?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。