我发现以下程序令人费解:
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#类只能在私有类本身时扩展私有类。
在扩展私有类可能有用时,您能提供任何方案吗?
答案 0 :(得分:1)
这将允许A作为实现细节(不暴露于外部),但内部可重复使用(作为B的基础)。对于B的用户,他们关心的是B可以履行其API所公开的所有合同。内部B使用A来履行这些合同的事实不应该打扰任何外部用户,对吧?
想象一下,A可以有更多的子类C,D,E,F等.A的代码可以被它们重用。
答案 1 :(得分:0)
当你的功能与你的类没有真正的关系但不能独立时,例如onclick事件等......你创建了一个内部类,因为逻辑只适用于这个类。除此之外,您可以扩展并执行您的程序逻辑所需的任何内容。
也是一个非常好的OCP问题。