3

PageObject というスーパー クラスがあり、PageObject を継承する AlphaPage と BetaPage という 2 つのサブクラスがあります。関数 "selectPage()" はこれらのページの 1 つを返しますが、返す特定のページは実行時にしかわかりません。

では、サブクラスの 1 つを関数呼び出しの戻り値にキャストする必要がないようにするには、関数の戻り値オブジェクトはどうあるべきでしょうか?

4

3 に答える 3

7

情報は実行時にのみ認識されるため、呼び出し元は特定のタイプが必要な場合にキャストする必要がありますPageObject基本的には戻るべきです。

もちろん、呼び出し元がまたはに固有のものを必要としない場合、AlphaPageまたはBetaPageで宣言されたメソッド(おそらく抽象)を使用できる場合はPageObject、キャストする必要はありません。それが理想的です-違いを処理するためにポリモーフィズムを使用してください。しかし、それは実際には発信者が何をする必要があるかに依存します。

于 2012-09-18T18:07:05.863 に答える
1

理想的には、とのInterface両方で実装されるコモンを定義することをお勧めします。どちらにも多くの共通の動作があるためです。AlphaPageBetaPage

PageObjectまたは、ページに含まれる可能性のある共通コードを実装できる抽象クラス (おそらくクラス) を宣言することもできます。

したがって、私の答えは、戻り値の型は共通のスーパー型 (インターフェイスまたは抽象クラス) である必要があるということです。

于 2012-09-18T18:13:03.860 に答える
0

インターフェイスを定義し、ページが提供する機能を指定すると、ページクラスがこのインターフェイスを実装して、必要な機能を提供します

public interface pageable {

pageable selectPage();
    ...
}



PageObject implements pageable {

    pageable selectPage(){
       ...
    }

...
于 2012-09-18T18:12:43.157 に答える