首页
学习
活动
专区
圈层
工具
发布

理解类
EN

Stack Overflow用户
提问于 2009-07-21 13:27:38
回答 6查看 409关注 0票数 3

我是编程新手,有一些关于类的问题。

我将以Karel为例:

代码语言:javascript
复制
public class Karel extends robot{
   ....

}

然后我扩展Karel:

代码语言:javascript
复制
public class SuperKarel extends Karel{
   ....

}

但接下来我想组织几组方法:

代码语言:javascript
复制
public class KarelJumps extends SuperKarel {
    ....

}

public class KarelColor extends SuperKarel {
    ....

}

但是,如果我想让Karel跳起来,我必须创建一个KarelJumps的实例,而不是SuperKarel。但是因为KarelJumps是一个不同于KarelColor的对象,所以我不能使用它的任何方法。

那么我是不是应该把所有的KarelJumpsKarelColor方法都放在SuperKarel?里面呢?我只需要创建一个大对象吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-21 13:33:05

扩展类最有用的原因是,您可以在新对象中使用基础类的功能,然后添加新类型独有的行为和特征。如果没有令人信服的理由这样做,而且经常没有,那么就不要这么做。不要使你的设计过于复杂,仅仅是为了利用多态性和继承。

您希望使用这些技术使您的应用程序更简单,而不是更复杂。对于一个新的程序员,我建议你读一本"Code Complete“这本书,并把它作为你的圣经。你本身不会从中学到一门语言,但你会学到应该如何做,以及为什么要这样做。

票数 5
EN

Stack Overflow用户

发布于 2009-07-21 13:39:01

看起来你想要更多的理解多态而不是类。

继承不提供“方法分组”的机制。

经典继承和多态性的核心概念可以在Liskov Substitution Principle中方便地捕获。从那个维基页面盗取:

如果S是T的子类型,则程序中类型T的对象可以被类型S的对象替换,而不改变该程序的任何所需属性。

确保您的子类可以替代父类,并且它们还添加了一些重要的、适当的功能,否则不要使用继承。

票数 2
EN

Stack Overflow用户

发布于 2009-07-21 13:29:18

如果您想要一个可以跳转并可以访问KarelColor方法的Karel,则需要将它们放在单个类中,或者更改层次结构。

KarelJumpsKarelColor是兄弟,不能互相访问对方的方法。如果你真的想把它们分开,也许:

代码语言:javascript
复制
public class SuperKarel extends Karel
public class KarelJumps extends SuperKarel
public class KarelColor extends KarelJumps

编辑:尽管如此,请收听克里斯布的回答。如果您没有在每个扩展类中添加重要的功能,那么您可能应该避免层次结构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1159166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档