繁体   English   中英

使用类创建引用名称和使用Interface之间的区别是什么

[英]what is the difference between creating reference name using class and using Interface

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

EX1

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

EX2

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

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

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

public static void print(Set<String> s)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM