簡體   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