[英]Java - Class that extends a class, and has a component that extends the other class' component
To clarify, this is a Stack and MinStack. 为了澄清,这是一个Stack和MinStack。
They use StackNode and MinStackNode respectively. 他们分别使用StackNode和MinStackNode。
I'm trying to get MinStack to extend Stack and MinStackNode to extend StackNode. 我正在尝试让MinStack扩展Stack和MinStackNode扩展StackNode。 However, when I do so MinStack uses StackNode instead of MinStackNode. 但是,当我这样做时,MinStack使用StackNode而不是MinStackNode。
This is because Stack uses StackNode and MinStack inherits this. 这是因为Stack使用StackNode,而MinStack继承了这一点。 I want MinStack to use MinStackNode. 我希望MinStack使用MinStackNode。
Organization: 组织:
StackNode -> Stack StackNode->堆栈
inherited by the classes below 由下面的类继承
MinStackNode -> MinStack MinStackNode-> MinStack
Any help would be appreciated. 任何帮助,将不胜感激。 Thanks! 谢谢!
Code snippet for Stack: 堆栈的代码段:
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: MinStack:
public class MinStack<E extends Comparable<E>> extends Stack<E>{
private MinStackNode<E> top;
public MinStack(Stack<E> s){
super(s);
}
}
StackNode: StackNode:
public class StackNode<E> {
private E data;
private StackNode<E> next;
public StackNode(E data){
this.data = data;
this.next = null;
}
}
MinStackNode: 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());
}
}
For space I didn't include some methods such as MinStackNode's minimum. 对于空间,我没有包括MinStackNode的minimum之类的方法。 If needed I'll include them. 如果需要,我将包括它们。
Well if MinStackNode
inherits StackNode
then you don't necessarily have to include the variable top
in MinStackNode
since a valid declaration already exists in StackNode
. 那么,如果MinStackNode
继承StackNode
那么你不一定要包括的变量top
在MinStackNode
,因为一个有效的声明中已经存在StackNode
。 However you will need to cast the value to MinStackNode
when you need to use any of the non-inherited properties/methods. 但是,当您需要使用任何非继承的属性/方法时,需要将值MinStackNode
为MinStackNode
。
I think your problem here is that what you expect to be of type MinStackNode is actually of this type, but is being stored in a variable of a more general type and so must be cast. 我认为您的问题是,您期望的MinStackNode类型实际上是这种类型,但是存储在更通用类型的变量中,因此必须进行强制转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.