我们可以使用以下方式创建驱动程序对象。
WebDriver driver = new FirefoxDriver();
FirefoxDriver driver = new FirefoxDriver();
FirefoxDriver是实现WebDriver接口的类。
在第一条语句中,我们使用接口名称,在第二条语句中,我们使用类名称。像我们无法访问某些方法等,两者之间有什么区别吗?
我在stackoverflow上寻找了这个问题,发现第一个是动态绑定,第二个是静态绑定,但是上面的两个声明之间有什么真正的区别吗?
如果我们没有什么不同,为什么我们应该有两个声明?
有人可以回答吗?
谢谢。
答案 0 :(得分:1)
这是基本设计原则:“ 编写接口而不是实现程序”。简单来说,这可以帮助我们将来轻松地更改数据结构,而无需进行大量修改。
假设今天您使用列表的一种实现,例如ArrayList
。明天,您可能会意识到需要使用LinkedList
。如果您已为接口编程,那只是一行更改,因为在代码的各处,您都在使用接口引用变量。另一方面,如果您已对实现进行编程,则需要更改对该变量的所有引用。这可能涉及更改方法的返回类型,方法参数,getter,setter等。
我们需要一种可以代替FirefoxDriver
和ChromeDriver
使用的类型。因此WebDriver driver = new FirefoxDriver()
为您提供了同样的灵活性。
参考:https://seleniumjava.com/2016/07/13/how-does-webdriver-driver-new-firefoxdriver-work/