繁体   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