java - 使用继承的方法定义方法

标签 java generics constructor super inheritance

我正在尝试定义 void add(T thing)方法使用堆栈的继承推送方法,但 Eclipse 表示返回类型与 Vector<T>.add(T) 不兼容并希望我更改 add(T) 的返回类型为 boolean 值,这没有意义。 下面是我的代码

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界面

public interface SomeList<T>{
public void add(T something);
public void take(T idx);
  .
  . 
  .
}

最佳答案

既然你持有 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...
    }

}

关于java - 使用继承的方法定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19675160/

相关文章:

java - 使用 HtmlUnit,我有一个 HtmlTableRow,如何获取其所有内容作为字符串值?

java - 我的带有 onClickListener 的 ImageView 在单击时不执行任何操作

java - 将多个 WSDL 与 Axis2 wsdl2code Maven 插件一起使用

c# - 通用列表中的属性名称相同但返回类型不同

java - 在 neo4j 密码中检索确切的节点 ID

Java泛型的误解

c# - 为什么不能将 Dictionary<T1, List<T2>> 转换为 Dictionary<T1, IEnumerable<T2>>?

.net - 正则表达式的默认初始化选项是什么?

vb.net - 我可以将委托(delegate)从后代的构造函数传递到抽象类的构造函数吗?

c++ - 当其他构造函数存在时,为什么 "ctor() = default"会改变行为?