PageObject というスーパー クラスがあり、PageObject を継承する AlphaPage と BetaPage という 2 つのサブクラスがあります。関数 "selectPage()" はこれらのページの 1 つを返しますが、返す特定のページは実行時にしかわかりません。
では、サブクラスの 1 つを関数呼び出しの戻り値にキャストする必要がないようにするには、関数の戻り値オブジェクトはどうあるべきでしょうか?
PageObject というスーパー クラスがあり、PageObject を継承する AlphaPage と BetaPage という 2 つのサブクラスがあります。関数 "selectPage()" はこれらのページの 1 つを返しますが、返す特定のページは実行時にしかわかりません。
では、サブクラスの 1 つを関数呼び出しの戻り値にキャストする必要がないようにするには、関数の戻り値オブジェクトはどうあるべきでしょうか?
情報は実行時にのみ認識されるため、呼び出し元は特定のタイプが必要な場合にキャストする必要があります。PageObject
基本的には戻るべきです。
もちろん、呼び出し元がまたはに固有のものを必要としない場合、AlphaPage
またはBetaPage
で宣言されたメソッド(おそらく抽象)を使用できる場合はPageObject
、キャストする必要はありません。それが理想的です-違いを処理するためにポリモーフィズムを使用してください。しかし、それは実際には発信者が何をする必要があるかに依存します。
理想的には、とのInterface
両方で実装されるコモンを定義することをお勧めします。どちらにも多くの共通の動作があるためです。AlphaPage
BetaPage
PageObject
または、ページに含まれる可能性のある共通コードを実装できる抽象クラス (おそらくクラス) を宣言することもできます。
したがって、私の答えは、戻り値の型は共通のスーパー型 (インターフェイスまたは抽象クラス) である必要があるということです。
インターフェイスを定義し、ページが提供する機能を指定すると、ページクラスがこのインターフェイスを実装して、必要な機能を提供します
public interface pageable {
pageable selectPage();
...
}
PageObject implements pageable {
pageable selectPage(){
...
}
...