java中什么是接口?
抽象類和接口
什么是接口:接口就是一些方法特征的集合------接口是對抽象的抽象。
什么是抽象類:抽象類對某具體類型的部分實現(xiàn)------抽象類是對具體的抽象。
方法特征包括:方法的名字、參數的數目、參數的類型。不包括:返回類型、參數名字、和拋出的異常。
接口是類型轉換的前提、是動態(tài)調用的保證。實現(xiàn)某一接口就完成了類型的轉換(多重繼承);動態(tài)調用只關心類型,不關心具體類。
--------------------------------------------------------------------------------------------------------------------------------------
java接口(抽象類)用來聲明一個新的類型。
Java設計師應當主要使用接口和抽象類將軟件單位與內部和外部耦合起來。
換言之,應當使用java接口和抽象類而不是具體類進行變量的類型聲明、參數的類型聲明、方法的返回類型聲明、以及數據類型的轉換等。
當然一個更好的做法是僅僅使用接口,而不是抽象類來做上面這些事情。
在理想的情況下,一個具體類應當只實現(xiàn)接口和抽象類中聲明的方法,而不應當給出多余的方法!
接口和抽象類一般作為一個類型等級結構的起點。
接口比抽象類更為抽象所以優(yōu)先使用接口聲明抽象類型!
--------------------------------------------------------------------------------------------------------------------------------------
抽象類和接口
抽象類僅提供一個類的部分實現(xiàn)。抽象類可以有實例變量、以及一個或多個構造函數。抽象類可以同時又抽象方法和具體方法。
一個抽象類不會有實例,它的構造函數不能被客戶端用來創(chuàng)建實例。一個抽象類的構造函數可以被其子類調用,從而使一個抽象類的所有子類可以有一些共同的實現(xiàn),而不同的子類可以在此基礎上有不同的實現(xiàn)。
接口比抽象類更為抽象所以有線使用接口聲明抽象類!
抽象類是用來繼承的。(具體類不是用來繼承的,“只要有可能不要從具體類繼承---scott meryes”)。
抽象類設計原則:
1. 抽象類應當擁有盡可能多的代碼!(公用方法)。代碼集中于抽象的方向。
2. 抽象類應當擁有盡可能少的數據!(公共屬性)。數據集中于具體的方向。
繼承復用的使用條件------- Peter Coad條件
1. 子類是超類的一個特殊種類而不是超類的一個角色!正確區(qū)分“Has-A”“Is-A”的關系。
2. 子類之間不應發(fā)生替換!?
3. 子類具有擴展超類的責任,而不是置換(Override)掉或注銷(Nullify)掉的責任。
4. 只有在分類學角度上有意義時才可以使用繼承,不要從具體類繼承。
接口和抽象類的區(qū)別:
1. 抽象類可以提供某些方法的實現(xiàn)。如果向抽象類中加入一個新的具體的方法,那么所有的子類一下子就得到了這個方法。接口做不到這一點!(這也許是抽象類的唯一優(yōu)點)。
2. 因java的單根結構限制,只類只能實現(xiàn)一個抽象類類型,而接口類型這無此限制。這使抽象類作為類型定義工具的效能落后于接口。接口是定義混合類型(實現(xiàn)多從繼承)的理想工具:用一個
3. 從代碼重構的角度上講,將一個具體類重構成一個接口的實現(xiàn)是很容易的。
研究好這中間的差別很有用的!