単純なSwing
クラスを試していましたが、抽象クラスを実装する具象クラスで実装されたメソッドへの呼び出しを最適に配置する方法について質問しました。Java抽象クラス階層と多態メソッド呼び出しと定義を整理する方法
現在、私は、この階層の子として意図されているクラスのメソッド(最上位と第2レベルのレベルで)を抽象クラスと具象クラスの小さな階層の最上位に持っています。これは、階層の子を拡張するクラス内にそのようなメソッドの定義を置くことであったので、そのようなメソッドをどこで定義し呼ぶべきかに関する問合せを提示した。
public abstract class AbstractFieldPanel extends JPanel
public abstract class BorderedFieldPanel extends AbstractFieldPanel
public class ExampleDataPanel extends BorderedFieldPanel
public class FieldPanel extends AbstractFieldPanel
Iコンポーネントは、以前abstract addComponents()
方法の実施においてBorderedFieldPanel
とAbstractFieldPanel
を拡張するクラスに追加されるそれらの詳細を指定したい次のよう
階層です。
addComponents()
メhtodの呼び出しは、abstract
であり、BorderedFieldPanel
とAbstractFieldPanel
で定義されています。
addComponents()
メソッドの具体的な実装方法は、使用する意図されたExampleDataPanel
とFieldPanel
にあります。
私が持っている質問は、階級AbstractFieldPanel
の最高クラスのコンストラクタの抽象メソッドへの呼び出しをポリモーフィックな理由の下に置いているのか、それとも最下位クラスのコンストラクタ階層内の?
当初、これは良いと思われました。相続と抽象クラスの多態的なプロパティと委譲を利用して、これは良いと考えました。OOデザイン。
これが正しければ、コンストラクタが拡張クラスの最初の行に明示的にまたは暗黙的に呼び出されたと考えると、問題が(場合によっては)発生する必要があります。したがって、どういうわけか、設計の観点からは必ずしも正しいことを感じることができず、このアプローチにどのように最善を尽くすべきかアドバイスを求めることを望んでいました。
コンストラクタからオーバーライド可能なメソッドを呼び出すことはお勧めできません。サブクラス内のメソッドは、まだ構築されていないオブジェクトに対して呼び出されます。 –
ありがとう、私はそれを含む理由で間違って聞こえた。 – manOf
私はそれをどのように再設計すべきか、誰にでもアドバイスをいただけますか?これらのクラスはすべて、このメソッドを呼び出す必要があります。特に、オブジェクトがどのように構成されているかに関するメソッドなので、これは階層のどこかのコンストラクタの中から呼び出されるビヘイビアであると思いますので少し混乱しますか? – manOf