我有一个任务来建立一个自我评估测试分级机。老师给了我们测试界面:
和问题界面:
实现,我不知道是否应该像这样在一个类中全部实现它们:
public class CQuestion implements IQuestion, IQuestionMultipleChoice,
IQuestionNumeric, IQuestionYesNo,IQuestionMetadata {}
public class CTest implements ITest,ITestStatistics {}
或者我是否应该为每种问题类型做一堂课。
我尝试了第一种方法,但由于有些方法具有相同的名称,因此我会出错。
我想尝试第二种方法,但是我不知道该怎么做。我知道我必须在测试类中创建一个问题对象,但是我不知道是否必须为每种问题类型创建一个对象。
答案 0 :(得分:0)
对于测试接口,我不明白为什么不能(乍一看),我认为您应该同时实现这两个接口。
对于问题接口,如您所知,方法签名不兼容。由于IQuestionMultipleChoice
,IQuestionNumeric
和IQuestionYesNo
都扩展了IQuestion
,因此您只需要实现前三个之一即可。正如@ john-bollinger在评论中指出的那样,如果您实现三个dub接口之一,则无需实现IQuestion
。
我认为您还应该实现IQuestionMetaData
,类似这样
public class CQuestionYesNo implements IQuestionYesNo, IQuestionMetaData {
... // your code here
}
答案 1 :(得分:0)
我不知道我应该在一个类中全部实现它们,还是应该为每种问题类型都做一个类。
我尝试了第一种方法,但由于存在相同名称的方法而出现错误
...和参数,但返回类型不同。那么,让我们在这里应用一些简单的逻辑:如果两个接口有冲突的要求,那么它们不能都由同一个类实现。因此,似乎必须存在实现IQuestionMultipleChoice
,IQuestionNumeric
和IQuestionYesNo
的单独的具体类。因为所有这些接口都扩展了IQuestion
,所以每个实现也都必须实现IQuestion
,因此似乎并不需要固有的实现。但是,为其他直接实现IQuestion
的其他人提供基类是很自然的。
由于IQuestion
具有获取和设置元数据的方法,因此对于上述任何类实现IQuestionMetaData
似乎都不有用。当然应该为此设置一个单独的类。
类似地,ITest
具有添加和删除IQuestion
并提供ITestStatistics
的方法,因此似乎前者的典型实现也不会实现后者的任何一种。这样看来,ITest
和ITestStatistics
也应该有单独的实现。
我想尝试第二种方法,但是我不知道该怎么做。我知道 我必须在测试类中创建一个问题对象,但是我没有 知道我是否必须为每种问题类型创建一个对象。
为什么ITest
实现需要创建问题对象?它具有使单独的对象可以添加和删除问题的方法。我没有理由认为测试应该能够提出自己的问题。
您说您的工作是实施评分器,但是以上任何一个似乎都不是评分器实施的一部分。这些界面似乎描述了您的评分员将要从事的工作。这并不一定意味着您不希望实现这些接口,但是在进行工作之前,应确保已实现。从我的角度来看,完全有可能期望您依靠评分器实现中的接口,而不是自己提供它们的实现。