1

ClassA と ClassB があり、ClassA がスーパークラスです。

ClassA は NodeA を使用し、ClassB は NodeB を使用します。

最初の問題: メソッドのパラメーター。ClassB には NodeB 型が必要ですが、サブクラスからスーパークラスにキャストできません。つまり、NodeB に固有のプロパティを設定することはできません。

2 番目の問題: ノードを ClassB に追加する必要がある場合、新しい NodeB をインスタンス化する必要があります。しかし、スーパークラスではこれを行うことができないため、NodeB を使用するように挿入を書き直す必要があります。

それを回避する方法はありますか、それともすべてを書き直す必要がありますか?

4

2 に答える 2

1

あなたの悩みの種に対する最善の解決策は、ジェネリックスを使用することだと思います。たとえば、によってパラメーター化された(おそらく抽象的な)共通のスーパークラスに共通のコードを配置しますNodeType。AとBはそれぞれCommonSuper<NodeA>、とをサブクラス化CommonSuper<NodeB>し、必要に応じて、個々のノードタイプに固有の処理を行うためにオーバーライドできます。このようにすると、コードの重複はほとんどなくなりますが、必要なすべてを実行できます。

于 2010-05-11T03:45:20.853 に答える
1

おそらくあなたはこのようなものを探していますか?

class NodeA { ... }
class NodeB extends NodeA { ... }

class ClassA<N extends NodeA> {
    public Node newNode() { return new NodeA(); }
    public void setProperties(Node n) { setPropertiesA(n); }
}

class ClassB extends ClassA<NodeB> {
    @Override
    public NodeB newNode() { return new NodeB(); }
    @Override
    public void setProperties(NodeB n) { setPropertiesB(n); super.setProperties(n); }
}

大まかに言って、それはあなたが求めているものですか?

特に、ClassBがaddNodeをオーバーライドしてサブクラスを返す方法と、setPropertiesが「チェーン」されて必要に応じてNodeBのプロパティを設定する方法に注意してください。

于 2010-05-11T03:48:29.673 に答える