说我有以下类/接口:

public Interface stackInt {
       public Node pop();
       public void push();
}

class Node {
     Node next;
     int Data;
     Node(int n){...}
     Node() {next=null, Data=null}
}

class bigNode extends Node {
      String Data2;
      Double Data3;
      Node(int n, String s, Double d) {Data=n; Data2=s; Data3=d}
}


public class Stack implements StackInt {
       Node head, tail, next;
       Stack(int n) {
            ....constructor...
       }
       Stack() {
            head=tail=next=null; (() constructor so can be extended)
       }

       generic pop() and push() implementations;

       public String toString() {
            //return string concatanateion of all data values
       }
}


public class bigStack extends Stack implements StackInt {
       //EXACT SAME AS STACK, BUT WITH bigNode instead of Node. bigNode(,,)
        different constructor, but for example, the only difference for pop wooud
        return bigNode instead of Node.

 }


根据良好的OOP设计,我有以下问题:

1)bigStack是否已经实现了StackInt,因为它已经扩展了Stack?
2)有没有不覆盖所有方法的方法;例如我想返回的pop方法
一个bigNode而不是一个Node(我也希望访问Data2和Data3),或者全部
这些没有完全相同的原型/功能的方法必须被覆盖吗?

从设计角度看,这样做看起来合理吗?

节点和堆栈位于一个文件中,bigNode和bigStack位于另一个文件中,StackInt位于第三个文件中,然后main()在另一个文件中。

main()在其自己的程序包中,其余的可能在com.xxx.DSImpl中?

最佳答案

您需要研究Java泛型:

public interface StackInt<T> {
       public T pop();
       public void push(T node);
}

public class Stack<T> implements StackInt<T>
{
    ...
}


主要...

Stack<Node>    nodeStack    = new Stack<Node>();
Stack<BigNode> bigNodeStack = new Stack<BigNode>();

10-07 22:45