使用继承方法定义方法

时间:2013-10-30 06:17:59

标签: java generics constructor super inheritance

我试图通过使用堆栈的继承push方法来定义void add(T thing)方法,但是Eclipse说返回类型与Vector<T>.add(T)不兼容,并且我希望我更改{{1}的返回类型1}}布尔值没有意义。 以下是我的代码

add(T)

这是我的public class ListStack<T> extends Stack<T> implements SomeList<T>{ Stack<T> stack1=new Stack<T>(); public ListStack(){//constructor super(); stack1=new Stack<T>(); } //add method public void add(T something){ this.push(something);} } 界面

SomeList

3 个答案:

答案 0 :(得分:2)

好吧,因为你持有Stack<T>成员作为成员,你不需要从同一个类继承。

删除继承并改为使用您的成员:

public void add(T something){
    stack1.push(something);
}

如果您不再继承Stack<T>,则编译器不应再抱怨add(T)的不同返回类型。


我认为您应该查看adapter pattern

我将如何做到这一点:

<强>接口

interface MyList<T> {
    public void addFront(T thing);

    public void remove(int pos);

    public void removeEnd();

    public T get(int pos);

    public int length();

    public boolean isEmpty();

}

<强>实施

class MyListImpl<T> implements MyList {
    Stack<T> mStack;

    public MyListImpl() {
        mStack = new Stack<T>();
    }

    public void addFront(T thing) {
        mStack.push(thing);
    }

    public void remove(int pos) {
        //mStack...
    }

    public void removeEnd() {
        //mStack...
    }

    public T get(int pos) {
        // return mStack...
    }

    public int length() {
        // return mStack... 
    }

    public boolean isEmpty() {
        // return mStack...
    }

}

答案 1 :(得分:0)

您的Stack Class必须使用返回类型为add()的方法boolean

答案 2 :(得分:0)

Stack类扩展Vector类,其中包含boolean add(E e)。我认为Eclipse会混淆add中的Vector方法和add界面中的SomeList方法。