为什么不能从父类中实现的接口对象调用子类方法

时间:2018-01-06 12:48:14

标签: java inheritance interface

public interface WebDriver {
    default void get() {
        System.out.println("Opening Url");}

    void click();
    void sendKeys();
}

public class RemoteWebDriver implements WebDriver {
    @Override
    public void click() {
        System.out.println("Clicking WebElement");
    }

    @Override
    public void sendKeys() {
        System.out.println("Entering Text");
    }
}

public class ChromeDriver extends RemoteWebDriver {
    public void clear() {
        System.out.println("Clearing Text");
    }
}

public class TestClass {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        driver.get();
        driver.click();
        driver.sendKeys();
        driver.clear();
    }
}

driver.clear();在TestClass中给出错误。 “对于类型WebDriver”

,方法clear()未定义

提供2种快速修复:

  • 在WebDriver类型中创建方法clear()
  • 将演员添加到webdriver

我知道这个

((ChromeDriver) driver).clear(); 

解决了这个问题。但是,任何人都可以更逻辑地解释,为什么它不允许调用子类方法

1 个答案:

答案 0 :(得分:0)

因为在编译时它将检查父类或接口中的方法,所以如果在父接口中找不到方法,它将给出编译错误