1

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

前一

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

ex2

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

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

使用 ex2 有什么好处?

4

3 回答 3

2

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

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

于 2012-09-29T12:13:27.870 回答
2

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

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

于 2012-09-29T12:15:03.607 回答
0

第二个有更多的优点:

在 Set 类型的变量中存储对 aHashSet或的引用被认为是一种很好的风格。TreeSet例如:

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

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

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

public static void print(Set<String> s)

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

于 2013-08-21T11:50:02.613 回答