gpt4 book ai didi

Java:无法访问外部类的子类中嵌套类子类的 protected 方法

转载 作者:行者123 更新时间:2023-12-02 10:14:58 26 4
gpt4 key购买 nike

我正在分解一个类以允许重用、不同的信息隐藏实现等。

它是:

public class Outer
{
public static class Inner
{
// ...
protected static void innerDoSomething()
{
// ...
}
}

public outerDoSomething()
{
//...
Inner.innerDoSomething();
//...
}
}

一切都很好,因为允许外部类访问嵌套内部类的 protected 成员。

但是尝试这样分解:

public class SuperOuter
{
public static class SuperInner
{
// ...
protected static void innerDoSomething()
{
// ...
}
}

// ...
}

public class SubOuter extends SuperOuter
{
public static class SubInner extends SuperInner
{
// ...
protected static void innerDoSomethingElse()
{
// ...
}
}

public outerDoSomething()
{
//...
SubInner.innerDoSomethingElse(); // OK
SubInner.innerDoSomething(); // Error: cannnot access!
//...
}
}

innerDoSomething() 不可访问,即使 SubInner 的 protected 成员可由 SubOuter 访问,并且 SuperInner 的所有 protected 成员都应是 SubInner protected 接口(interface)的一部分。

使其工作的唯一方法似乎是为每个方法添加显式委托(delegate),例如:

    public static class SubInner extends SuperInner
{
// ...
protected static void innerDoSomethingElse()
{
// ...
}

protected static void innerDoSomething()
{
SuperInner.innerDoSomething();
}
}

这很烦人、容易出错并且浪费时间。我很想将innerDoSomething() 声明为public,但这并不是真正正确的,因为它只能由SubOuter 及其子类使用。

怎么会呢?难道innerDoSomething() 保护的访问不应该被SubOuter 继承和访问吗?

最佳答案

protected 方法不能通过变量引用从不同的包中访问。如果 SuperOuter 和 SubOuter 这两个类位于同一个包中,它将起作用。

关于Java:无法访问外部类的子类中嵌套类子类的 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54750889/

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