说我有以下类/接口:
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>();