次のクラス/インターフェースがあるとします。
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 は既に Stack を拡張しているため、StackInt も実装する必要がありますか? 2)すべてのメソッドをオーバーライドしない方法はありますか。たとえば、ノードだけではなく bigNode を返したい pop メソッド (Data2 と Data3 にもアクセスしたい)、またはまったく同じプロトタイプ/機能を持たないこれらすべてのメソッドをオーバーライドする必要がありますか?
デザインの観点から、これは合理的に見えますか?
Node と Stack を 1 つのファイルに、bigNode と bigStack を別のファイルに、StackInt を 3 番目のファイルに、次に main() をさらに別のファイルに記述します。
main() は独自のパッケージに、残りは com.xxx.DSImpl にあるのでしょうか?