Java 下面两组代码的区别是什么
我已经开始学习Java和selenium,我想了解下面两组代码之间的区别,它们都执行得很好,并且具有相同的行为 WebDriver是一个接口,它由一个类FirefoxDriver实现,FirefoxDriver实现了它的所有方法。因此,为了调用FirefoxDriver中的方法,我们正在用它的构造函数创建一个firefox对象,但是为什么人们经常使用第一个(在下面的集合中)以及当我们使用类的构造函数来创建对象时,它意味着什么,而不是将接口名(类已经实现)放在类中 //第二个Java 下面两组代码的区别是什么,java,selenium,Java,Selenium,我已经开始学习Java和selenium,我想了解下面两组代码之间的区别,它们都执行得很好,并且具有相同的行为 WebDriver是一个接口,它由一个类FirefoxDriver实现,FirefoxDriver实现了它的所有方法。因此,为了调用FirefoxDriver中的方法,我们正在用它的构造函数创建一个firefox对象,但是为什么人们经常使用第一个(在下面的集合中)以及当我们使用类的构造函数来创建对象时,它意味着什么,而不是将接口名(类已经实现)放在类中 //第二个 import org
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class FirstOne
{
public static void main(String[] args)
{
FirefoxDriver driver = new FirefoxDriver();
driver.get("http://google.com");
System.out.println(driver.getTitle());
driver.close();
}
}
由于
FirefoxDriver
实现了WebDriver
接口,因此可以使用WebDriver
类型的引用来指向FirefoxDriver
的实例。这基本上是为了遵循OOP原则,即——
使用第一种方法给了您很大的灵活性,这是程序员遵循的最佳实践。通过对象的接口
引用对象,可以在以后更改实现,而不会影响现有代码的大部分内容。这种方法对于依赖项注入之类的东西特别有用
有关更多信息,请查看。您也可以退房,第52项-
通过对象的接口引用对象
Sayem是对的,但让我进一步说明为什么会这样做 这允许我们称之为解耦。本质上,使用WebDriver的代码只关心它是一个WebDriver,而不是WebDriver的实现。本质上,调用代码应该只关心WebDriver做什么,而不是如何做
这种解耦或“关注点分离”的概念是OO的一个基本方面。谷歌可以收集大量关于这个主题的文章,它确实值得一读,因为它是优秀java和优秀OO编程的基础。作为一个应用面向对象设计原理的实际例子,如果你将程序编写到一个接口上,那么具体的实现就可以被替换掉 如果您有:
FirefoxDriver driver = new FirefoxDriver();
如果有人要求您在Chrome或Internet Explorer上运行此测试,会发生什么情况?如果您对接口编程,您只需执行以下操作:
WebDriver driver = new FirefoxDriver();
或
或
这样,您就不必总是实现FirefoxDriver,也不必局限于实现FirefoxDriver,您可以根据需要将其与接口的其他具体实现进行交换
WebDriver driver = new FirefoxDriver();
WebDriver driver = new ChromeDriver();
WebDriver driver = new InternetExplorerDriver();