gpt4 book ai didi

java - 从内部类继承。从对内部类的引用访问封闭实体

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:24:10 28 4
gpt4 key购买 nike

我知道如果我想扩展内部类我应该做这样的事情:

class Outer{
class Inner{}
}

class My extends Outer.Inner{
My(Outer outer){
outer.super();
}
}

但是遇到这种情况我不知道该怎么办?如何获取内部对象的封闭实例?

class My extends Outer.Inner{
My(Inner inner){
// how to get enclosing instance of inner here
}
}

此变体无法编译:

class Outer{
class Inner{}
}

class My extends Outer.Inner{
My(Outer.Inner inner){
inner.Outer.this.super();
}
}

最佳答案

如果我没理解错的话,您想从扩展内部类的类访问外部类的成员。

您只能根据您声明类的范围来执行此操作。当您在外部类中扩展内部类时,所有成员都在范围内并且您可以访问它们,例如

class Outer {
private int var = 0;

class Inner {}

class My extends Outer.Inner {
My() {
var = 1;
}
}
}

如果在外部类之外声明类,如果扩展类型在同一个包中,您仍然可以访问包私有(private)成员

class Outer {
int var = 0;

class Inner {}

}

class My extends Outer.Inner {
My( Outer outer ) {
outer.super();
outer.var = 1;
}
}

如果您在包范围之外,您可以通过将继承内部类的类包含在继承外部类的类中以访问其 protected 成员来解决此问题:

class Outer {
protected int var = 0;

class Inner {}

}
class OuterMy extends Outer {
class My extends Inner {
My( Outer outer ) {
var = 1;
}
}
}

如果这也不是一个选项,您只能通过手动存储外部实例来访问公共(public)成员。

class Outer {
public int var = 0;

class Inner {}
}

class My extends Outer.Inner {
private Outer outer;
My( Outer outer ) {
outer.super();
this.outer = outer;
}
void method() {
outer.var = 1;
}
}

据我所知,这些是您的选择,您无法访问封闭类的 JVM 内部实例

关于java - 从内部类继承。从对内部类的引用访问封闭实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386459/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com