为了澄清,这是一个Stack和MinStack。
他们分别使用StackNode和MinStackNode。
我正在尝试让MinStack扩展Stack和MinStackNode扩展StackNode。但是,当我这样做时,MinStack使用StackNode而不是MinStackNode。
这是因为Stack使用StackNode,而MinStack继承了这一点。我希望MinStack使用MinStackNode。
组织:
StackNode->堆栈
由下面的类继承
MinStackNode-> MinStack
任何帮助,将不胜感激。谢谢!
堆栈的代码段:
public class Stack<E> implements StackInterface<E> {
private StackNode<E> top;
private int size;
public Stack(E data){
StackNode<E> node = new StackNode<E>(data);
this.top = node;
}
public Stack(){
this.top = null;
}
}
MinStack:
public class MinStack<E extends Comparable<E>> extends Stack<E>{
private MinStackNode<E> top;
public MinStack(Stack<E> s){
super(s);
}
}
StackNode:
public class StackNode<E> {
private E data;
private StackNode<E> next;
public StackNode(E data){
this.data = data;
this.next = null;
}
}
MinStackNode:
public class MinStackNode<T> extends StackNode<T> {
private T min;
public MinStackNode(Comparator<T> comparator, T data) {
super(data);
this.min = minimum(this.getNext().getMin(), this.getData());
}
}
对于空间,我没有包括MinStackNode的minimum之类的方法。如果需要,我将包括它们。
最佳答案
好吧,如果MinStackNode
继承了StackNode
,那么由于top
中已经存在有效的声明,因此您不必在MinStackNode
中包括变量StackNode
。但是,当您需要使用任何非继承的属性/方法时,都需要将值强制转换为MinStackNode
。
我认为您的问题是,您期望的MinStackNode类型实际上是这种类型,但是存储在更通用类型的变量中,因此必须进行强制转换。