【发布时间】:2012-09-11 01:01:10
【问题描述】:
我有一个名为 PageObject 的超类,以及两个继承 PageObject 的名为 AlphaPage 和 BetaPage 的子类。 函数“selectPage()”将返回其中一个页面,但要返回的具体页面只有在运行时才能知道。
那么,函数的返回对象应该是什么,才能避免将子类之一强制转换为函数调用的返回值?
【问题讨论】:
标签: java object subclass superclass
我有一个名为 PageObject 的超类,以及两个继承 PageObject 的名为 AlphaPage 和 BetaPage 的子类。 函数“selectPage()”将返回其中一个页面,但要返回的具体页面只有在运行时才能知道。
那么,函数的返回对象应该是什么,才能避免将子类之一强制转换为函数调用的返回值?
【问题讨论】:
标签: java object subclass superclass
如果调用者想要特定类型,他们将必须进行转换,因为信息仅在执行时才知道。基本上你应该返回PageObject。
当然,如果调用者不需要任何特定于 AlphaPage 或 BetaPage 的东西 - 如果他们可以使用在 PageObject 上声明的方法(可能是抽象的),那么就不需要强制转换。那将是理想的-使用多态性来处理差异。这实际上取决于调用者需要做什么。
【讨论】:
理想情况下,我建议定义一个共同的Interface,由AlphaPage 和BetaPage 实现,因为两者都有很多共同的行为。
或者,您可以声明一个抽象类(在您的情况下可能是 PageObject 类),它可以实现您的页面可能具有的任何通用代码。
所以我的回答是返回类型应该是一个普通的超类型(接口或抽象类)。
【讨论】:
您可以定义一个接口并指定页面应提供哪些功能,然后您的页面类将实现此接口,从而提供所需的功能
public interface pageable {
pageable selectPage();
...
}
PageObject implements pageable {
pageable selectPage(){
...
}
...
【讨论】: