2013-10-25 140 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 */ 
    } 
相关问题