当前,在我的Java程序中,我有一个基本的Parent类,其中包含几种返回自身新实例的方法。例如:
public BasePage fill(String input, By locator) {
driver.findElement(locator).clear();
driver.findElement(locator).sendKeys(input);
return new BasePage(driver);
}
同样,我有几个类使用自己的方法扩展了该基类。我的问题是这样的:我的主程序中有没有一种方法可以调用这些Parent方法,但不使用强制类型转换就将返回值分配给子类?例如,如果我有一个
loginPage
Child类,需要在主程序中使用此方法,我将如何打开它:loginPage = (LoginPage) loginPage.fill("username", usernameLocator);
到这个:
loginPage = loginPage.fill("username", usernameLocator);
我在哪里初始化 class :
public class LoginPage extends BasePage {
}
尽管在此示例中未提及,但可以允许它返回任何子类,这样它就不仅限于一个类。
最佳答案
是的,有办法。在子类(例如LoginPage
)中,重写fill
方法。使用Java的covariant return types(滚动到底部),您可以将LoginPage
指定为返回类型。
public LoginPage fill(String input, By locator) {
driver.findElement(locator).clear();
driver.findElement(locator).sendKeys(input);
return new LoginPage(driver);
}
假设您可以使用
LoginPage
创建一个driver
,而Driver
属于Driver
类,这意味着您需要一个采用ojit_code的子类构造函数。public LoginPage(Driver driver)
{
super(driver);
// Anything else LoginPage-specific goes here
}