-
1 # 科技老扎
-
2 # rookies
以List list = new ArrayList為例,這裡前者是介面,後者是實現了該介面的物件,這裡介面引用指向子類物件的方式是java中多型的體現,
這裡簡單說一下多型的定義:指允許不同類的物件對同一動作做出不同的響應。
List list;是在棧區開闢一個空間放list引用,並沒有建立物件所以不知道ArrayList還是LinkedList當你list= new ArrayList(); 就建立了ArrayList物件。並且把開始建立的list引用指向這個物件ArrayList。
這裡有一個問題了,為什麼一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?
問題就在於List有多個實現類,如 LinkedList或者Vector等等,現在你用的是ArrayList,也許哪一天你需要換成其它的實現類呢?這時你只要改變這一行就行了:List list = new LinkedList(); 其它使用了list地方的程式碼根本不需要改動。假設你開始用 ArrayList alist = new ArrayList(), 這下你有的改了,特別是如果你使用了 ArrayList特有的方法和屬性。 如果沒有特別需求的話,最好使用List list = new LinkedList();以便於程式程式碼的重構. 這就是面向介面程式設計的好處
需要注意的是list只能使用ArrayList中已經實現了的List介面中的方法,ArrayList中那些自己的、沒有在List介面定義的方法是不可以被訪問到,list.add()其實是List介面的方法,但是呼叫ArrayList的方法如 clone()方法是呼叫不到的
-
3 # Java架構師CAT
因為面向介面程式設計的這種風格被濫用了。
無論是SSH,還是SSM大家都愛先搞個介面,然後再搞實現類,美其名曰將來有新的實現方式的時候,只需要換一個實現類即可。 事實上,絕大部分專案開發出來之後,再也沒有換過實現類。
-
4 # 灬亦凡
以List list = new ArrayList為例,這裡前者是介面,後者是實現了該介面的物件,這裡介面引用指向子類物件的方式是java中多型的體現,
這裡簡單說一下多型的定義:指允許不同類的物件對同一動作做出不同的響應。
List list;是在棧區開闢一個空間放list引用,並沒有建立物件所以不知道ArrayList還是LinkedList當你list= new ArrayList(); 就建立了ArrayList物件。並且把開始建立的list引用指向這個物件ArrayList。
這裡有一個問題了,為什麼一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?
-
5 # 爪哇程式猿
有一個很簡單的例子,java.util中的類ArrayList實現了介面List則生成ArrayList物件時可用以下語句.
List list=new ArrayList();
也就是說所有實現了介面List的類,都可以用List介面來宣告物件型別,然後用實體類進行例項化.這表明了介面可以用來作為型別的表述.當然,生成的物件list只能呼叫介面List中提供的方法.
同樣的操作也可以用在父類與子類身上,例如設A類是B類的父類
則建立B類物件的時候可以用以下語句
A b=new B();
這樣的用法可以大大提高程式設計的靈活性.
-
6 # 程式設計師Bob
作為一個多年的程式設計師,一直在用Java做開發,我覺得很有資格來回答您の這個問題。
介面在Java需要中很常見,尤其是在Spring框架中有大量的介面。
介面存在的主要意義是統一,對於呼叫者來說只需呼叫相同的方法即可。每個人都有各自不同的實現,呼叫者不用關心你具體的實現方法,只需關心統一的介面,這種方式可以降低使用者的使用門檻,也使程式可以輕鬆切換具體的實現。
這種介面方式得以實現得益於Java的多型機制。
即當有父類引用子類例項的時候,執行的是子類的方法。
要想有多大需要滿足兩個條件
1.子類中有重寫
2.父類引用指向子類例項
-
7 # 大V觀影
為了實現多型。
Person p1 = new Boy();
Person p2 = new Girl();
Person可以宣告為一個介面,Boy和Girl實現了這個介面。
p1,p2 既可以是Boy也可以是Girl,只有在例項化的時候才可以知道。
回覆列表
這是java中的向上轉型,實現java程式設計的多型。
簡單的一句話講就是父類引用指向子類物件。
上轉型物件不是父類建立的物件,而是子類物件的“簡化”狀態,它不關心子類新增的功能,只關心子類繼承和重寫的功能。
當一個類有很多子類時,並且這些子類都重寫了父類中的某個方法。
當使用上轉型物件在呼叫這個方法時就可能具有多種形態。因為不同的子類在重寫父類的方法時可能產生不同的行為。也就是說,不同物件的上轉型物件呼叫同一方法可能產生不同的行為