【问题标题】:Inheritance example of a real world tree真实世界树的继承示例
【发布时间】:2015-04-16 20:47:04
【问题描述】:

我确实有一个关于继承和类的基本问题。

您将如何创建一棵树(一棵真实的树)的真实世界对象。

树应该有树枝,树枝应该有叶子。

所以:

class Tree {
// something about a tree itself
}

Class Branch : Tree {
//something about a branch
}

Class Leaf : Branch {
//something about a leaf
}

但是现在,一个树类是否应该知道所有分支实例并自己创建所有分支对象,而分支应该为自己创建叶子并且也知道它们?

所以如果你只放一棵树,你会:

Tree myNewTree = new Tree(); // or something like that ? 

我想我在这里得到了一些东西......形状示例 - > 矩形并且你要求矩形是有道理的。

【问题讨论】:

  • 继承在这里是错误的方法。树枝不是树,叶子也不是树枝。
  • 这里适合什么方法?
  • 选择组合而不是继承
  • 这里的树是一个对象。你必须只有一门课。分支和叶子可以是变量或数组。这取决于你的情况。
  • 你想要的是composition或者aggregation,而不是inheritance。看看这个链接from stack overflow或者这个tutorial

标签: inheritance


【解决方案1】:

你可以有以下结构

class Tree {
// something about a tree itself
        Branch b[];
        Leaf lf[];
}

Class Branch {
    //something about a branch
}

Class Leaf{
  //something about a leaf
}

如果你想限制树类型的分支和叶子,那么在上面的结构中扩展树类,并根据现实世界的场景将它们组合到你的树类中。

这里我使用了数组,您可以根据需要使用其他任何东西,例如 ArrayList 或简单对象。

【讨论】:

  • 我确实从 cmets 中了解了几乎所有这些,但是您所说的“在上述结构中扩展树类”是什么意思?
  • 这只是意味着当你仍然希望你的分支和叶子应该从 Tree 继承。然后为分支和叶子继承 Tree 类。
  • 我觉得叶子应该是树枝的属性,而不是树的属性。
  • @bwroga 在我的例子中。
  • @Tomas,该评论是为 user2408578 准备的。
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 2010-11-23
  • 2016-11-26
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
相关资源
最近更新 更多