gpt4 book ai didi

java - 静态嵌套类可以通过非静态扩展

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:24 25 4
gpt4 key购买 nike

我的代码如下:-

A类T可以延长ClassO.FourFourClassO 内的静态类但无法扩展ClassO.Two Two ClassO 里面是一个内部类。我收到错误

No enclosing instance of type ClassO is available due to some intermediate constructor invocation

行为差异的原因是什么?

class ClassO
{
interface inner
{
void msg();
}

class Two implements inner
{
public void msg()
{
System.out.println("Class Two");
}
}

static class Four
{
public void msg()
{
System.out.println("Class Four");
}
}

public void m()
{

}
}

class T extends ClassO.Two **// can extend ClassO.Four but not ClassO.Three**
{
public void msg()
{
System.out.println("Class Two");
}
}

最佳答案

回想一下,静态内部类是一个“普通”类,其名称嵌套在其所有者类中,并且对其所有者类的私有(private)静态成员具有附加访问权限。因此,静态内部类对于实例化它们的位置没有限制。

相反,非静态内部类可以访问其所有者类的静态和非静态成员。为了实现这一点,Java 编译器将一个指向所有者的隐藏指针嵌入到嵌套类中,并将所有者的实例传递给该构造函数。

此行为依赖于非静态内部类实例化时所有者的 this 的可用性。如果编译器允许您从其所有者之外的非静态成员继承,它将无法实例化您的派生类,实际上迫使它表现得像内部类一样。这就是编译器禁止此类继承的原因。

关于java - 静态嵌套类可以通过非静态扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47801704/

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