简体   繁体   English

Java-扩展一个类的类,并具有扩展另一个类的组件的组件

[英]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那么你不一定要包括的变量topMinStackNode ,因为一个有效的声明中已经存在StackNode However you will need to cast the value to MinStackNode when you need to use any of the non-inherited properties/methods. 但是,当您需要使用任何非继承的属性/方法时,需要将值MinStackNodeMinStackNode

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM