当前,在我的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
}

10-07 21:03