Java继承 - 类型子类

时间:2014-04-14 07:06:21

标签: java design-patterns

这更像是如何设计概念

  1. 应该作为具有所有共同属性的基类的类,具体类
  2. 问答扩展了Post class。它们具有Post的所有属性以及特定于它们的属性。
  3. 可以有不同类型的问题,如UserAskedQuestion或BookQuestion - 这再次扩展问题(具体类)----这里3级继承(UserAskedQuestion - > Question - > Post)

    这是我想要实现的目标: 所有这些实体都存储在数据库中,我想从那里获取(它可以是cassandra或Mysql),所以想法是,用户的一行介绍将被保存为帖子,如果用户询问问题,它将是存储为userAskedQuestion。但是现在如果我想知道该用户发布的所有帖子,它应该包括帖子(一个班轮)以及(问题)

  4. 问题:

    1. 继承3级是否合适?由于我已经阅读了很多内容,继承会使代码复杂化,但此时我无法找到任何其他解决方案。
    2. 我应该如何尝试实现它,以便如果我获取Post,它应该获取所有帖子,问题/答案及其子类型,如果我提取问题,它应该获取所有问题和问题子类型?
    3. 如果不是继承,还有其他方法可以实现这种行为吗?

2 个答案:

答案 0 :(得分:3)

问题1

是的,当然多级继承会给你更好的设计。我认为这会使事情更复杂,因为它会为您提供更多High CohesionLess Coupling。 通过此设计,您可以从Information Expert获得GRAPS模式。

问题2

参见示例Multilevel inheritance in java with example


在评论中回答问题:在将数据库作为Post类获取后,您可以使用instanceof的{​​{1}}运算符

public void doSomething(Post param) {
  if( param instanceof Question ) {
    System.out.println("param is a Question ");
  }
  else if( param instanceof Answer) {
    System.out.println("param is an Answer");
  }
 // Even you can check for whether its UserAskedQuestion or BookQuestion also
}

答案 1 :(得分:0)

我认为,Decorator模式是要走的路..

发布一个界面。问答作为实现Post的抽象类。