摘要Class,面向对象

Abstract Class, OOP

以下哪些陈述表明我们应该声明一个 class 摘要?

Select一个:

一个。 class 过于笼统,无法表示真实世界的对象

b。 class 有子 classes 需要用他们自己的特定实现来实现一些行为

c。 class 只有构造函数,getter / setter 方法,没有任何业务行为。

d。 class 至少有一个抽象方法

e。仅选项 b 和 d

f。选项 a、b 和 d

我在测试中遇到了这个问题,但选择了一个错误的答案。我认为这个问题的措辞很奇怪,但想知道正确答案是什么以及为什么。

我会选择 f。
如:
a) 如果它不是真实世界的对象,你永远不必直接初始化它。
b) 如果行为差异很大,您也可以为此使用非抽象 class 或接口。所以这可能有点主观。
c) 这可能是对 POJO / JavaBean 的描述,但与抽象 classes.
无关 d) 如果你有一个你没有实现的抽象方法,使class抽象是必须.

虽然我必须说,这个问题有点主观,答案也可能是 e),具体取决于您教授的意见。但是在 a) 中强调它不是 "real" 的东西似乎必须是 f)。

我认为选项e.

推理:

a) 我认为过于笼统而无法表示真实的 wold 对象会暗示您的 OOD 模型存在不同的问题,而不是简单地抽象就可以解决的问题。

b) 是的。特别是因为它说,“......需要实施一些行为......”,因为一些行为(方法)将有实施而其他人则不会,这表明抽象 class,除非您将未实现的行为分解为接口。但总的来说,抽象候选者的一个关键指标是您希望将一些已实现的行为与未实现的操作(抽象方法)捆绑在一起。

c) 这将使它成为 POJO 的候选而不是抽象 class。这不需要抽象。

d) 是的。如果它有一个抽象方法,除非 class 被声明为抽象的,否则它不会编译。