Java 下面两组代码的区别是什么

Java 下面两组代码的区别是什么,java,selenium,Java,Selenium,我已经开始学习Java和selenium,我想了解下面两组代码之间的区别,它们都执行得很好,并且具有相同的行为 WebDriver是一个接口,它由一个类FirefoxDriver实现,FirefoxDriver实现了它的所有方法。因此,为了调用FirefoxDriver中的方法,我们正在用它的构造函数创建一个firefox对象,但是为什么人们经常使用第一个(在下面的集合中)以及当我们使用类的构造函数来创建对象时,它意味着什么,而不是将接口名(类已经实现)放在类中 //第二个 import org

我已经开始学习Java和selenium,我想了解下面两组代码之间的区别,它们都执行得很好,并且具有相同的行为

WebDriver是一个接口,它由一个类FirefoxDriver实现,FirefoxDriver实现了它的所有方法。因此,为了调用FirefoxDriver中的方法,我们正在用它的构造函数创建一个firefox对象,但是为什么人们经常使用第一个(在下面的集合中)以及当我们使用类的构造函数来创建对象时,它意味着什么,而不是将接口名(类已经实现)放在类中

//第二个

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();