使用类创建引用名称和使用接口创建引用名称有什么区别

  • 本文关键字:引用名 创建 区别 接口 java
  • 更新时间 :
  • 英文 :


任何人都可以解释一下,使用对象创建引用名称或使用接口有什么区别。

例1

ArrayList li=new ArrayList();// creating reference  using class name

例2

List li=new ArrayList()//creating reference  using interface name

在真实场景中,为什么开发人员使用 ex2?

使用 ex2 有什么好处?

第二种方法是对接口进行编程。它清楚地表明,尽管您可能依赖于所选实现行为的某些方面(例如其性能特征或排序顺序等),但您仅依赖于接口中声明的成员。这通常使以后更容易将一个实现换成另一个实现。

(如果你依赖于实现的某些非常具体的方面,我发现明确说明通常是一个好主意,以避免以后出现意外。

这意味着您正在为合约而不是实现编码。在您的示例中,列表联系人。如果以后您需要不同类型的列表,您需要做的就是更改您进行声明的一行。它使将来进行更改变得更加容易。

如果您需要 ArrayList 上不在列表中的特定方法,则使用 ex1 是有效的。尽管如果您从 ArrayList 更改,可能会更难。此链接可能对 http://jdevelopment.nl/java-best-practices-5-code-to-interface-access-by-name-and-instance-data/有用

第二个有更多的优点:

在Set 类型的变量中存储对HashSetTreeSet的引用被认为是一种很好的样式。例如:

Set<String> names = new HashSet<String>();

这样,如果您决定改用树集,则只需更改一行。

此外,对集合进行操作的方法应指定 Set 类型的参数:

public static void print(Set<String> s)

然后,该方法可用于所有集合实现。

最新更新