0

次のクラス/インターフェースがあるとします。

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 にあるのでしょうか?

4

2 に答える 2