实现类的接口:接口到接口的类

时间:2013-10-15 14:50:24

标签: java interface

嗨,我是一个初学者,我试图实现一个接口的类。该接口扩展了另一个接口。我正在使用方法来运行列表并干扰它,这两个接口是其中的一部分。

这两个接口在每个单独的文件中,但是所有内容都在同一个包中,希望这是正确的。

我收到以下错误:

来自班级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> 
  {

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

3 个答案:

答案 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
}