我是编程新手,有一些关于类的问题。
我将以Karel为例:
public class Karel extends robot{
....
}然后我扩展Karel:
public class SuperKarel extends Karel{
....
}但接下来我想组织几组方法:
public class KarelJumps extends SuperKarel {
....
}
public class KarelColor extends SuperKarel {
....
}但是,如果我想让Karel跳起来,我必须创建一个KarelJumps的实例,而不是SuperKarel。但是因为KarelJumps是一个不同于KarelColor的对象,所以我不能使用它的任何方法。
那么我是不是应该把所有的KarelJumps和KarelColor方法都放在SuperKarel?里面呢?我只需要创建一个大对象吗?
发布于 2009-07-21 13:33:05
扩展类最有用的原因是,您可以在新对象中使用基础类的功能,然后添加新类型独有的行为和特征。如果没有令人信服的理由这样做,而且经常没有,那么就不要这么做。不要使你的设计过于复杂,仅仅是为了利用多态性和继承。
您希望使用这些技术使您的应用程序更简单,而不是更复杂。对于一个新的程序员,我建议你读一本"Code Complete“这本书,并把它作为你的圣经。你本身不会从中学到一门语言,但你会学到应该如何做,以及为什么要这样做。
发布于 2009-07-21 13:39:01
看起来你想要更多的理解多态而不是类。
继承不提供“方法分组”的机制。
经典继承和多态性的核心概念可以在Liskov Substitution Principle中方便地捕获。从那个维基页面盗取:
如果S是T的子类型,则程序中类型T的对象可以被类型S的对象替换,而不改变该程序的任何所需属性。
确保您的子类可以替代父类,并且它们还添加了一些重要的、适当的功能,否则不要使用继承。
发布于 2009-07-21 13:29:18
如果您想要一个可以跳转并可以访问KarelColor方法的Karel,则需要将它们放在单个类中,或者更改层次结构。
KarelJumps和KarelColor是兄弟,不能互相访问对方的方法。如果你真的想把它们分开,也许:
public class SuperKarel extends Karel
public class KarelJumps extends SuperKarel
public class KarelColor extends KarelJumps编辑:尽管如此,请收听克里斯布的回答。如果您没有在每个扩展类中添加重要的功能,那么您可能应该避免层次结构。
https://stackoverflow.com/questions/1159166
复制相似问题