[英]Java - Class that extends a class, and has a component that extends the other class' component
為了澄清,這是一個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
。
我認為您的問題是,您期望的MinStackNode類型實際上是這種類型,但是存儲在更通用類型的變量中,因此必須進行強制轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.