2013-10-15 212 views
3

嗨在這個初學者,即時嘗試實現一個類到接口。該界面擴展了另一個界面。我在做一個類的方法來遍歷一個列表並干擾它,這兩個接口是分開的。實現接口到一個類:接口到接口

這兩個接口在每個單獨的文件中,但一切都在同一個包中,希望這是正確的。

即時得到以下錯誤:

從類doublelinkedlist:interface expected here

從接口答: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

一個接口不能從一個類擴展,只能從另一個接口擴展。一個類不能從一個接口擴展,只能從一個非final類中擴展。一個類可以實現一個或多個接口。 –

+2

@JeroenVannevel你可以在類中聲明內部接口/類,這沒有什麼錯。 –

回答

4

interface expected here表示該編譯器implements後期待一個界面,在這裏你給它一個類(因爲class A<T>的聲明是第一位)。

doublelinkedlist.A is already defined in doublelinkedlist, interface expected here被拋出,因爲你有一個類命名爲A和類命名爲A內部的接口,它們不能同時有相同的名字(爲B相同)

雖然技術上可以有內部的接口一個類,這並不是最好的設計(因爲接口是爲了抽象或隱藏底層類的細節,它們通常更明顯),所以儘量避免這樣做,除非你有一個很好的理由:)

這可能是你要找的東西:

雙鏈接list.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

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 
} 

- >的實現接口一個

文件A.java:

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

- > inte rface擴展界面B1

文件B.java:

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

- >的接口擴展接口可迭代

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 
}