java – 为什么内部静态类会扩展外部抽象类?
发布时间:2020-12-15 05:14:40 所属栏目:Java 来源:网络整理
导读:我试图扩展一些使用复合模式实现树的现有代码.正如预期的那样,有一个界面 ?(节点)和表示通用节点的抽象类(AbstractNode).后者由多个具体类型的节点(ConcreteNodeA,ConcreteNodeB,ConcreteNodeC)扩展. 我在我正在使用的代码中遇到了这个其他模式,其中具体类被
我试图扩展一些使用复合模式实现树的现有代码.正如预期的那样,有一个界面
?(节点)和表示通用节点的抽象类(AbstractNode).后者由多个具体类型的节点(ConcreteNodeA,ConcreteNodeB,ConcreteNodeC)扩展. 我在我正在使用的代码中遇到了这个其他模式,其中具体类被实现为静态内部类,扩展了外部抽象类.同时,它们从外部(?)接口节点实现静态内部接口(NodeA,NodeB,NodeC). public interface Node { public static interface NodeA {} public static interface NodeB {} public static interface NodeC {} } public abstract class AbstractNode implements Node { public void foo() { ... } public void bar() { ... } ... public static class ConcreteNodeA extends AbstractNode implements Node.NodeA { ... } public static class ConcreteNodeB extends AbstractNode implements Node.NodeB { ... } public static class ConcreteNodeC extends AbstractNode implements Node.NodeC { ... } } 这种模式有什么用?通过多年的Java经验,我以前从未见过这样的东西.我的直觉说它是一种巨大的代码味道,因为具体的类经常被实例化并在整个代码中多次使用.无论如何,我并不担心效率,只是这是很难保持和延伸!将它们放在不同的课程中会更有意义,对吗? 我已经搜索了更多正式的参考文献来证明这样做是不错的主意,但还没有找到任何东西. 没有编译错误,代码完美无缺. 解决方法
在描述类型的相关族(例如树的节点)时,此模式实际上非常常见.
一个原因很简单,它是一个方便的分组;这些类往往是单独的小,并且将它们全部集中在一个地方可以使它更容易阅读和维护,以及发送它们是紧密耦合的族并且打算一起使用的信号. 一个更令人信服的理由是它可以提供一种密封类的形式.通过在抽象类中使用私有构造函数,只有内部类可以访问它,这意味着内部类是唯一允许的子类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |