Java 抽象类

Java 抽象类,java,oop,Java,Oop,下面哪项陈述表明我们应该声明一个类抽象 选择一个: a。该类太泛型,无法表示真实世界的对象 b。该类有子类,这些子类需要用自己的特定实现实现某些行为 c。该类只有构造函数、getter/setter方法,没有任何业务行为 d。该类至少有一个抽象方法 e。仅选项b和d f。备选方案a、b和d 我在考试中遇到了这个问题,选择了一个错误的答案。我相信这个问题的措辞很奇怪,但我想知道正确答案是什么以及原因。我会选择选项f。 As: a) 如果它不是真实世界的对象,则永远不必直接初始化它。 b) 如果行为

下面哪项陈述表明我们应该声明一个类抽象

选择一个:

a。该类太泛型,无法表示真实世界的对象

b。该类有子类,这些子类需要用自己的特定实现实现某些行为

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

d。该类至少有一个抽象方法

e。仅选项b和d

f。备选方案a、b和d


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

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


尽管我必须说,这个问题有点主观,答案也可能是e),这取决于你教授的观点。但强调它不是a)中的“真实”事物似乎一定是f)

我认为选项e.

理由:

a) 我认为,过于泛化而无法表示真实的世界对象会导致您的OOD模型出现不同的问题,而不是简单的抽象就能解决的问题

b) 对。特别是因为它说,“…需要实现一些行为…”,因为一些行为(方法)将有实现,而其他将没有实现,这表明是抽象类,除非您将未实现的行为分解到接口中。但一般来说,抽象候选对象的一个关键指标是您希望将一些已实现的行为与未实现的操作(抽象方法)捆绑在一起

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


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

选项F是正确的,尽管关于A有一些宗教争论。