嗨,我是一个初学者,我试图实现一个接口的类。该接口扩展了另一个接口。我正在使用方法来运行列表并干扰它,这两个接口是其中的一部分。
这两个接口在每个单独的文件中,但是所有内容都在同一个包中,希望这是正确的。
我收到以下错误:
来自班级doublelinkedlist:interface expected here
从界面A:doublelinkedlist.A is already defined in doublelinkedlist, interface expected here
从界面B:doublelinkedlist.B is already defined in doublelinkedlist
代码类:
package doublelinkedlist;
import java.util.*;
public class Doublelinkedlist<T> implements A<T>
{
代码接口A :(在名为A.java的单独文件中)
package doublelinkedlist;
import java.util.Iterator;
public class A<T> { // am I supposed to have a class here? or just have the interface?
public interface A<T> extends B<T>
{
代码接口B :(在名为B.java的单独文件中)
package doublelinkedlist;
public class B<T> {
public interface B<T> extends Iterable<T>
{
这个类中的两个接口没有代码,所以我不明白为什么我得到一个错误,说它已经定义了。有人知道吗?
答案 0 :(得分:7)
interface expected here
表示编译器期望implements
之后的接口,在那里你给它一个类(因为class A<T>
的声明是第一个)。
doublelinkedlist.A is already defined in doublelinkedlist, interface expected here
是因为你有一个名为A的类和一个名为A的类中的接口,它们不能都具有相同的名称(与B相同)
虽然技术上可以在类中有一个接口,但这并不是最好的设计(因为接口旨在抽象或隐藏基础类的细节,它们通常更加明显),所以尝试除非你有充分的理由,否则不要这样做:)
这可能就是你要找的东西:
Doublelinkedlist.java:
package doublelinkedlist;
import java.util.*;
public class Doublelinkedlist<T> implements A<T>
{...}
A.java:
package doublelinkedlist;
import java.util.Iterator;
public interface A<T> extends B<T>
{...}
B.java:
package doublelinkedlist;
public interface B<T> extends Iterable<T>
{...}
进一步阅读界面: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
答案 1 :(得分:0)
public class A<T> { // am I supposed to have a class here? or just have the interface?
public interface A<T> extends B<T>
{
这很暧昧。是接口还是类?
只有接口才能“实施”。你不能实现一个类。
所以我想你的问题是通过将它们改为:
来完成的文件DoubleLinkedList.java:
public class Doublelinkedlist<T> implements A<T>
{
// ... blah blah
}
- &GT; 类实现了接口A
文件A.java:
public interface A<T> extends B<T>
{
// ...
}
- &GT;接口扩展了接口B
文件B.java:
public interface B<T> extends Iterable<T>
{
// ...
}
- &GT;该接口扩展了Iterable接口
答案 2 :(得分:0)
public interface Entity{
public int getId();
public void setId(int id);
public int getHealth();
public void setHealth(int health);
}
public class Tank implements Entity{
//without implementing the methods mentioned in Entity you will immediately see a red line //under "Tank" in your IDE saying un-implemented methods.
}
public class Tank implements Entity{
private int id;
private int health;
public Tank(){..}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public int getHealth(){
return health;
}
public void setHealth(int health){
this.health = health;
}
}
接口是实现接口的类之间的契约,它说“嘿,你已经注册使用我,所以你最好采用这些方法并正确定义它们。”
接口只会描述方法标题,但实际上并不向它提供任何内容,而是留给实现该接口的类。
更进一步,了解以下内容 inheritence - 允许类继承其父类的属性和方法,但是同一个子类不能直接从2个父类继承,但是您可以从父类继承子类继承自实现接口的另一个类。 这是一个例子
public interface Entity{
...
}
public Soldier implements Entity{
// implements the entity interface,
//and defines the methods
}
public SwordsMan extends Soldiers{
//this class inherits the methods and attributes of soldier
//which had also implemented the methods from entity
}
您还提到尝试将接口扩展到接口,接口设计时没有实现的方法,如果您想使用两个接口,最好这样做:
public class Aircraft implements Engine, Entity{
//this class then has to implements all methods from Engine and Entity
}