我在UML中有以下架构:
Lecturer----implements-----Teaches (interface)
|
Assistant-----implements-----|
所以我希望我的界面有一个教师可以讲课的课程列表,助理也可以这样做。到目前为止,我有以下代码:
public interface Teaches{
public String[] coursesList=new String[3];
}
// class Teacher将couses输入coursesList,如下所示:
public class Teacher{
//////
private int i;
//currently omitting some arguments in the constructor
public Teacher(){
i=1;
}
addCourse(String course){
coursesList[i]=course;
i++;
}
同样的程序由助理班完成,但是当我打印数据时,我注意到只列出了老师而不是助手的课程。有没有办法不发生这种情况?
由于
答案 0 :(得分:2)
默认情况下,接口定义中的所有变量都是static
和final
。 Section 9.3 of the JLS covers this:
接口主体中的每个字段声明都是隐式的public,static和final。允许为这些字段冗余地指定任何或所有这些修饰符。
这意味着实现Teaches
接口的任何内容都可以访问相同的static
数组coursesList
。您的Teacher
对象可能会覆盖coursesList
数组的元素。
您应该将Teaches
接口更改为抽象类,以便它可以拥有自己的实例变量courseList
,每个具体的子类都可以访问它。
答案 1 :(得分:1)
接口不能有数据,只是说明。
如果您希望您的课程继承String[] coursesList
,您宁愿让课程抽象