Java - 扩展类的类,并具有扩展其他类的组件。部件

时间:2015-12-03 15:11:41

标签: java inheritance

澄清一下,这是一个Stack和MinStack。

他们分别使用StackNode和MinStackNode。

我试图让MinStack扩展Stack和MinStackNode来扩展StackNode。但是,当我这样做时,MinStack使用StackNode而不是MinStackNode。

这是因为Stack使用StackNode和MinStack继承了这一点。我希望MinStack使用MinStackNode。

组织:

StackNode - >堆

由以下类继承

MinStackNode - > MinStack

任何帮助将不胜感激。谢谢!

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:

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的最小值。如果需要,我会包含它们。

1 个答案:

答案 0 :(得分:1)

如果MinStackNode继承StackNode,那么您不必在top中包含变量MinStackNode,因为{{1}中已存在有效声明}}。但是,当您需要使用任何非继承的属性/方法时,需要将值强制转换为StackNode

我认为你的问题在于你所期望的MinStackNode类型实际上属于这种类型,但是存储在一个更通用类型的变量中,因此必须被强制转换。