7

嗨,我是这方面的初学者,我正在尝试将类实现到接口。该接口扩展了另一个接口。我用方法创建一个类来运行一个列表并干扰它,这两个接口是分开的。

这两个接口各自在其单独的文件中,但一切都在同一个包中,希望这是正确的。

我收到以下错误:

从类双链表: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> 
  {

类中的两个接口没有代码,所以我不明白为什么我得到一个错误,说它已经定义了。有人有线索吗?

4

3 回答 3

7

interface expected here表示编译器在 之后需要一个接口implements,您在其中给了它一个类(因为 for 的声明class A<T>首先出现)。

doublelinkedlist.A is already defined in doublelinkedlist, interface expected here被抛出是因为你有一个名为 A 的类和一个名为 A 的类内部的接口,它们不能都具有相同的名称(与 B 相同)

虽然从技术上讲,您可以在类内部拥有一个接口,但这并不是最好的设计(因为接口旨在抽象或隐藏底层类的细节,它们通常更明显),所以尽量避免这样做除非你有充分的理由:)

这可能是您正在寻找的:

双链表.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

于 2013-10-15T15:05:22.057 回答
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> 
{

这是模棱两可的。A 是接口还是类?

只有接口可以“实现”。你不能实现一个类。

所以我想你的问题是通过将它们更改为:

文件 DoubleLinkedList.java:

public class Doublelinkedlist<T> implements A<T>
{
 // ... blah blah
}

->实现接口 A

文件 A.java:

public interface A<T> extends B<T> 
{
   // ...
}

-> 接口扩展接口 B

文件 B.java:

public interface B<T> extends Iterable<T> 
{
   // ...
}

-> 接口扩展接口Iterable

于 2013-10-15T15:04:49.170 回答
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;
}
}

接口是实现接口的类之间的契约,它是说“嘿,你已经注册使用我,所以你最好采用这些方法并正确定义它们”。

接口只会描述方法头,但实际上并不提供任何内容,它留给实现接口的类。

此外,了解以下继承 - 使类能够继承其父类的属性和方法,但同一个子类不能直接从 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
}
于 2013-10-15T15:08:36.543 回答