[英]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類型的變量中存儲對HashSet
或TreeSet
的引用被認為是好的樣式。 例如:
Set<String> names = new HashSet<String>();
這樣,如果您決定使用TreeSet,則只需更改一行。
此外,對集合進行操作的方法應指定Set類型的參數:
public static void print(Set<String> s)
然后,該方法可用於所有集合實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.