加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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经验,我以前从未见过这样的东西.我的直觉说它是一种巨大的代码味道,因为具体的类经常被实例化并在整个代码中多次使用.无论如何,我并不担心效率,只是这是很难保持和延伸!将它们放在不同的课程中会更有意义,对吗?

我已经搜索了更多正式的参考文献来证明这样做是不错的主意,但还没有找到任何东西.

没有编译错误,代码完美无缺.

解决方法

在描述类型的相关族(例如树的节点)时,此模式实际上非常常见.

一个原因很简单,它是一个方便的分组;这些类往往是单独的小,并且将它们全部集中在一个地方可以使它更容易阅读和维护,以及发送它们是紧密耦合的族并且打算一起使用的信号.

一个更令人信服的理由是它可以提供一种密封类的形式.通过在抽象类中使用私有构造函数,只有内部类可以访问它,这意味着内部类是唯一允许的子类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读