簡體   English   中英

Java-擴展一個類的類,並具有擴展另一個類的組件的組件

[英]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那么你不一定要包括的變量topMinStackNode ,因為一個有效的聲明中已經存在StackNode 但是,當您需要使用任何非繼承的屬性/方法時,需要將值MinStackNodeMinStackNode

我認為您的問題是,您期望的MinStackNode類型實際上是這種類型,但是存儲在更通用類型的變量中,因此必須進行強制轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM