我应该定义一个与超类型完全相同的子类型

时间:2013-02-11 08:38:29

标签: java inheritance

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

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

2 个答案:

答案 0 :(得分:0)

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

Java中的

多态性被翻译成关系“是一个”

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

答案 1 :(得分:0)

您的问题似乎有答案。看起来你需要有3个类,即使CompulsoryModule没有其他属性,只扩展了Module。

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

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

此外,使类抽象可以防止任何人创建该类的实例,并且只能实例化一个子类。同样,在某些事情未在模块本身中完全定义并且需要特定的子类来理解超类的代码时,需要这样做。