我们可以使用以下方式创建驱动程序对象。
WebDriver driver = new FirefoxDriver();
FirefoxDriver driver = new FirefoxDriver();FirefoxDriver是一个实现WebDriver接口的类。
在第一个语句中,我们使用接口名称,在第二个语句中,我们使用类名。这两者之间有什么区别吗?比如我们不能访问一些方法等等?
我在堆栈溢出上寻找了这个问题,发现第一个是动态绑定,第二个是静态绑定,但是上面这两个声明之间有什么真正的区别吗?
如果我们没有任何区别,为什么我们应该有两个声明?
有人能回答这个问题吗?
谢谢。
发布于 2018-09-21 11:42:29
这是一个基本设计原则:“程序到接口而不是实现”。用非常简单的术语来说,这可以帮助我们在将来轻松地改变数据结构,而不需要做太多的修改。
假设今天,您使用list的一个实现,比如ArrayList。明天,您可能会意识到您需要使用LinkedList。如果您已经编程到一个接口,它只是一行更改,因为在代码中的任何地方,您都在使用接口引用变量。另一方面,如果您已经对实现进行了编程,则需要更改对该变量的所有引用。这可能涉及更改方法返回类型、方法参数、getter、setter等。
我们需要一种可以替代FirefoxDriver和ChromeDriver的类型。因此,WebDriver driver = new FirefoxDriver()为您提供了相同的灵活性。
参考:https://seleniumjava.com/2016/07/13/how-does-webdriver-driver-new-firefoxdriver-work/
https://stackoverflow.com/questions/52442910
复制相似问题