3

我有一个名为 PageObject 的超类,然后是两个名为 AlphaPage 和 BetaPage 的子类,它们继承了 PageObject。函数“selectPage()”将返回这些页面之一,但要返回的特定页面只有在运行时才能知道。

那么,函数的返回对象应该是什么,才能避免将子类之一强制转换为函数调用的返回值呢?

4

3 回答 3

7

如果调用者想要特定类型,则必须强制转换,因为该信息仅在执行时才知道。你应该返回PageObject,基本上。

当然,如果调用者不需要任何特定的AlphaPageBetaPage- 如果他们可以使用声明的方法(可能是抽象的)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 回答