Java 使用继承的方法定义方法

Java 使用继承的方法定义方法,java,generics,constructor,super,inheritance,Java,Generics,Constructor,Super,Inheritance,我试图通过使用堆栈继承的push方法来定义voidadd(T thing)方法,但是Eclipse说返回类型与Vector.add(T)不兼容,并希望我将add(T)的返回类型更改为布尔值,这是没有意义的。 下面是我的代码 public class ListStack<T> extends Stack<T> implements SomeList<T>{ Stack<T> stack1=new Stack<T>(); public

我试图通过使用堆栈继承的push方法来定义void
add(T thing)
方法,但是Eclipse说返回类型与
Vector.add(T)
不兼容,并希望我将
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);}
}

您的
堆栈类
必须具有方法
add()
,返回类型为
boolean

堆栈
类扩展
向量
类,该类包含
boolean add(E)
。我认为Eclipse混淆了
Vector
中的
add
方法和
SomeList
界面中的
add
方法。

既然您作为成员持有
Stack
的实例,就不需要从同一个类继承

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

public void add(T something){
    stack1.push(something);
}
如果您不再子类
Stack
,编译器就不应该再抱怨
add(t)
的不同返回类型了


我想你应该调查一下这件事

我会这样做:

接口

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();

}
接口MyList{
公共场所(T事物);
公共空间移除(int pos);
公共无效删除();
公共T-get(int-pos);
公共整数长度();
公共布尔值为空();
}
实施

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...
    }
类MyListImpl实现MyList{
堆叠mStack;
公共MyListImpl(){
mStack=新堆栈();
}
公共场所(T型物){
推(东西);
}
公共无效删除(int pos){
//mStack。。。
}
公共无效删除(){
//mStack。。。
}
公共T-get(内部位置){
//返回mStack。。。
}
公共整数长度(){
//返回mStack。。。
}
公共布尔值为空(){
//返回mStack。。。
}

}

这就是为什么我们更喜欢组合而不是继承。但后来我在pop()和push上出现了一个错误。因为它们没有定义。是的,这就是结果。但我真的不明白为什么需要提供push/pop和add/take方法,因为它们无论如何都会这样做。你能提供更多关于你想要实现什么的信息吗?我打算实现一个ListStack数据结构,它只使用pop()、push、isEmpty()和peek()的堆栈操作。它实现了一个接口列表,该列表具有以下方法
addFront(T thing)
将内容添加到列表的前面
remove(int pos)
从某些位置pos
removeEnd()
从结构的末尾移除内容
get(int pos)
获取结构中特定位置的内容,
int length()
返回结构的大小,最后是
isEmpty()
如果结构为空则返回true,如果结构为空则返回false。
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...
    }