1

我有一个java作业。它的需求表明有一个称为Module的超类型。它有两个子类型类“必修模块”和“选修模块”。前者继承了超类的所有属性;后者有一个额外的属性,称为部门名称。

我认为必修模块与模块相同。定义一个与超类相同的子类是正确的。每个模块实例必须是强制的或可选的。没有其他类型的模块。我是否应该将 Module 定义为抽象类,因为在决定在实际情况下应该使用什么类时我不想混淆。或者有人可以给我一些提示。

4

2 回答 2

0

您应该问的问题是: 选修课是必修课吗如果是这种情况,那么您可以让选修模块成为必修模块的超类。

Java中的多态被翻译成关系 “是一个”

(在您的作业中,很明显 Module 类应该是抽象的。因为它与 Elective Module 类具有相同的“行为”。)

于 2013-02-11T08:45:37.620 回答
0

看起来你的问题有答案。即使 CompulsoryModule 没有其他属性并且仅扩展模块,您似乎也需要拥有 3 个类。

模块本身可以是抽象的,也可以不是。这取决于您要达到的目标。在某些情况下,您不可能将超类 Module 定义为非抽象类。

例如,如果 Module 有一个您不知道如何实现的方法,除非您使用 CompulsoryModule 或 ElectiveModule,那么您必须将该方法定义为抽象的,从而使整个类抽象。

此外,使类抽象可防止任何人创建该类的实例,并且只能实例化子类。同样,当某些东西没有在 Module 本身中完全定义并且需要特定的子类来理解超类的代码时,就需要这样做。

于 2013-02-11T08:59:16.857 回答