在Java中扩展私有类

时间:2016-12-17 14:52:57

标签: java language-lawyer

我发现以下程序令人费解:

package package1;

public class Main {
    private static class A { }

    public static class B extends A { }
}

// ----------------
package package2;


public class Test {
    public static void main(String[] args) {
        Main.B b = new Main.B();
    }
}

为什么Java允许公共类B扩展私有类A?在其他语言,例如C#类只能在私有类本身时扩展私有类。

在扩展私有类可能有用时,您能提供任何方案吗?

2 个答案:

答案 0 :(得分:1)

这将允许A作为实现细节(不暴露于外部),但内部可重复使用(作为B的基础)。对于B的用户,他们关心的是B可以履行其API所公开的所有合同。内部B使用A来履行这些合同的事实不应该打扰任何外部用户,对吧?

想象一下,A可以有更多的子类C,D,E,F等.A的代码可以被它们重用。

答案 1 :(得分:0)

当你的功能与你的类没有真正的关系但不能独立时,例如onclick事件等......你创建了一个内部类,因为逻辑只适用于这个类。除此之外,您可以扩展并执行您的程序逻辑所需的任何内容。

也是一个非常好的OCP问题。