Java 我应该在一个类中实现所有接口还是为每个接口创建一个类?

Java 我应该在一个类中实现所有接口还是为每个接口创建一个类?,java,interface,Java,Interface,我的任务是建立一个自我评估测试评分器。老师给了我们测试界面: 和问题接口: 要实现,我不知道是否应该在一个类中实现它们,如下所示: public class CQuestion implements IQuestion, IQuestionMultipleChoice, IQuestionNumeric, IQuestionYesNo,IQuestionMetadata {} public class CTest implements ITest,ITestStatisti

我的任务是建立一个自我评估测试评分器。老师给了我们测试界面:

和问题接口:

要实现,我不知道是否应该在一个类中实现它们,如下所示:

public class CQuestion implements IQuestion, IQuestionMultipleChoice,
        IQuestionNumeric, IQuestionYesNo,IQuestionMetadata {}

public class CTest implements ITest,ITestStatistics {}
或者我是否应该为每个问题类型上一节课

我尝试了第一种方法,但由于存在同名的方法,所以出现了错误


我想试试第二种方法,但我不知道怎么做。我知道我必须在测试类中创建一个问题对象,但我不知道是否必须为每个问题类型创建一个对象。

对于测试接口,我不明白为什么不能(乍一看),我认为您应该实现这两个接口

在问题接口的情况下,正如您所发现的,方法签名中存在不兼容。由于
IQuestionMultipleChoice
IQuestionNumeric
IQuestionYesNo
都扩展了
IQuestion
,因此您只需要实现前三个选项中的一个。正如@john bollinger在评论中指出的,如果您实现三个dub接口中的一个,那么就没有必要实现
IQuestion

我认为您还应该实现
IQuestionMetaData
,类似这样的东西

public class CQuestionYesNo implements IQuestionYesNo, IQuestionMetaData {
... // your code here
}
我不知道我是否应该在一个类中实现它们[…],或者我是否应该为每个问题类型执行一个类

我尝试了第一种方法,但由于存在同名的方法,所以出现了错误

。。。和参数,但返回类型不同。那么,让我们在这里应用一些简单的逻辑:如果两个接口有冲突的需求,那么它们不能都由同一个类实现。因此,似乎必须有单独的具体类来实现
IQuestionMultipleChoice
IQuestionNumeric
iquestioniesno
。由于所有这些接口都扩展了
IQuestion
,因此这些实现中的每一个都必须实现
IQuestion
,因此似乎不需要单独实现它。然而,对于直接实现
IQuestion
的其他类来说,拥有一个基类是相当自然的

由于
IQuestion
具有获取和设置元数据的方法,因此上述任何类实现
IQuestionMetaData
似乎都没有用处。当然,应该有一个单独的类

类似地,
ITest
具有添加和删除
IQuestion
以及提供
ITestStatistics
的方法,因此前者的典型实现似乎不会同时实现后者。因此,似乎还应该有
ITest
ITestStatistics
的单独实现

我想试试第二种方法,但我不知道怎么做。我知道 我必须在测试类中创建一个问题对象,但我没有 知道是否必须为每个问题类型创建一个对象

为什么
ITest
实现需要创建问题对象?它有一些方法,单独的对象可以使用这些方法添加和删除问题。我看不出有任何理由认为测试应该能够创造出自己的问题


重要提示:
您说过您的工作是实施分级器,但是以上所有内容似乎都不是分级器实施的一部分。相反,这些界面似乎描述了评分器将操作的主题。这并不一定意味着您不需要实现这些接口,但您应该在投入工作之前确保这一点。从我的角度来看,完全可能期望您在分级器实现中依赖接口,但不提供自己的接口实现。

用例描述很重要。上面说什么?它如何规定应该这样做?一般来说,这个程序的目的是什么?“我尝试了第一种方法,但由于有同名的方法,所以出现了错误。”——如果接口对方法有冲突的要求——看起来是这样的——那么这基本上回答了这部分问题。但是我认为你不需要任何直接实现
IQuestion
@lealcelderio它在最终结果中应该是这样的两个问题:1-在ITest实现中,addQuestion方法的内部是什么?2-我没有从你的解释中得到我是否应该实现和“IQuestion”类。我不认为这是必要的,因为来自该接口的方法自动位于其他3个类中。附言:也许分级机不是正确的术语。基本上,我们在json文件中得到了一组问题,从中,程序需要能够识别问题的类型,并加载该问题类型的特定测试窗口。最终结果应该是这样的。@Brunochnha,1。我不知道你的指导老师的意图是什么,但我从阅读方法签名中得到的期望是,该方法将提供的
问题
存储在某种内部数据结构中--可能是一个
列表。我在第一段的后半部分讨论这个问题。似乎没有提供直接实现
IQuestion
的内在需求,但是您可能会发现,提供一个作为其他三个问题接口实现的超类是有用的。