2013-10-25 197 views
0

我有兩個類我希望它們實現一個叫LinearList的特定接口,它們有很多共同的方法,但其中一個方法調用add,它有兩個不同的參數和方法的主體是兩個類的不同,所以我怎麼能添加方法添加到界面實現一個具有兩種不同方法簽名和接口的接口

public void add(String item) { 
    array.add(item); 
} 

public void add(int index, Object theElement) { 
    if (index < 0 || index > size) 
    // invalid list position 
    throw new IndexOutOfBoundsException 
     ("index = " + index + " size = " + size); 

    // valid index, make sure we have space 
    if (size == element.length) { 
    // no space, double capacity 
    Object [] newArray = new Object[element.length*2]; 
    System.arraycopy(element,0,newArray,0,element.length);  
    element = newArray; 
    } 

    // shift elements right one position 
    for (int i = size - 1; i >= index; i--) 
    element[i + 1] = element[i]; 

    element[index] = theElement; 
    System.out.println("added ok"); 
    size++; 
    } 
} 


public interface LinearList { 
    public int size(); 
    public void add(int index, Object theElement); 
} 
+0

在這種情況下,爲接口定義方法的類都沒有實現'LinearList'。您可能需要將'add'方法添加到接口或更改其中一個類的'add'方法。 –

回答

1

你兩種不同的方法添加到接口:

void add(String item); 
void add(int index, Object theElement); 

當你實現這個接口,你必須添加兩個方法ds在你的班級裏。

+0

你不需要''interface'中的'public'。所有'interface'成員都是'public'。 –

+0

這樣,兩個方法都需要在兩個類中實現。這不是一個開銷?! – SudoRahul

+0

是的,我完全忘記了這一點。 –

1

當兩個方法具有相同的名稱但參數不同時,這稱爲method overloading。 Java接口的支持方法重載,所以你只需要聲明他們兩個:

void add(int index, Object theElement); 
void add(String item); 

這將迫使你用兩個接口(也許第三常見的同時實現,如果你不想這樣做,唯一的解決辦法是接口)。例如:

interface GenericAddable { 
    void add(String item); 
} 

interface IndexedAddable { 
    void add(int index, Object element); 
} 

interface LinearList { 
    void method1(); 
    void method2(); 
} 

class List1 implements LinearList, GenericAddable { 
    .. 
} 

class List2 implements LinearList, IndexedAddable { 
    .. 
} 
1

做一個父接口爲您的特定接口:

interface Addable { 
    /* common methods go here */ 
    } 

    interface LinearListAddable extends Addable { 
    void add(int index, Object theElement); 
    } 

    interface IndexedAddable extends Addable { 
    /* some other specific add method */ 
    } 

    class Test implements IndexedAddable { 
    /* add method implemeted */ 
    } 
相關問題