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

时间:2012-09-29 12:11:04

标签: java

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

EX1

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

EX2

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

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

使用ex2有什么好处?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

第二个有更多优点:

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

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

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

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

类型的参数
public static void print(Set<String> s)

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