您好,登錄后才能下訂單哦!
本篇內容主要講解“java繼承多態和抽象類接口知識點總結”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java繼承多態和抽象類接口知識點總結”吧!
通過擴展一個已有的類,并繼承該類的屬性和行為,來創建一個新的類。已有的稱為父類,新的類稱為子類(父類派生子類,子類繼承父類)。
(1)繼承的優點:
①代碼的可重用性;
②父類的屬性的方法可用于子類;
③子類可擴展父類的屬性和方法;
④設計應用程序變得更加簡單。
(2)關鍵字“is a”用于判斷父類和子類的繼承關系是否正確。
(3)Java中繼承的實現:
public class 子類 extends 父類{}
(4)繼承的單根性:在Java中一個類只能有一個父類;
傳遞性:一個Java類可以父類,父類也可以有父類。
(5)所有類的根類:
Object類,又叫基類或超類。
Object類是每個Java類的父類,要么是直接的父類,要么就是間接的父類。
Object類中的三個重要方法:
① public boolean equals(Object x):檢測兩個對象是否相等。
該方法經常被重寫。若兩個對象通過該方法判斷是相等的,那么兩個對象的 hashCode()方法應該產生相同的哈希碼
② public String toString:該方法返回對象的字符串表示。
用字符串來表示對象有助于調試或測試。
③ protected void finalize() throws Throwale:
該方法在對象將要被垃圾回收時調用。
(6)方法重寫:
子類可以重寫從父類繼承的方法,從而允許子類添加或者改變父類中方法的行為。
該行為方法生在子類中,對父類方法重寫。
子類重寫父類方法時,必須遵循如下規則:
①子類的方法的返回值類型、方法名和形式參數列表必須和父類中的是相同的;
②訪問修飾符必須不小于父類中的訪問修飾符;
③子類中重寫拋出的異常不能比父類中拋出的異常多。
(7)super 關鍵字:
子類想要給繼承的方法添加行為,但并不完全替換父類的方法。
(默認情況下,子類構造器會調用父類的無參構造方法)
(8)final 關鍵字:
當不希望一個類被繼承是則在class前加上關鍵字final。
final關鍵字可以出現在返回值類型之前的任意位置,習慣上是放在訪問修飾符之后。
①final類:一個類可以聲明為最終類的。最終類不能被繼承。
②final方法:一個方法可以聲明為最終的。最終方法不能被重寫。
補充:父類的構造方法不能被繼承。
可用super( , , )來調用構造器,用super調用父類方法。
(9)abstract關鍵字:
使用關鍵字abstract可以聲明一個抽象類。
該關鍵字可以出現在類聲明時class關鍵字前的任何地方。
當類沒有實例化必要時,可將該類改為抽象類。
(10)抽象方法:
①沒有方法主體;
②必須出現在抽象類中;
③在子類中必須被重寫,除非子類也是抽象類。
更多繼承多態java技術知識理解請查看《java多態案例分析--深入人心的理解》
(1) ①接口中全都是抽象方法,不能被實例化;
②類不能繼承接口,只能“實現”接口所定義的方法;
(2)接口與類
相似之處:
①接口可以有任意數量的方法;
②接口保存以“ .Java ”為后綴名的文件,接口名需要與文件名匹配;
③接口編譯后是后綴名為“ .class ”的字節碼文件;
④在包中的接口,其相應的字節碼文件必須放置在和包名稱相匹配的一個目錄結構中。
不同之處:
①接口不能被實例化;
②接口不包含任何構造器;
③接口中所有的方法都是抽象的;
④接口中不能包含實例成員變量。
唯一可以出現在接口中的成員變量必須是同時聲明為static和final,即公有靜態常量;
⑤接口不能被一個類繼承,只能被一個類實現;
⑥一個接口能夠繼承多個接口。
(3)接口具有以下性質:
①接口默認是抽象的;
②接口的中每一個方法默認也是抽象的;
③接口中的方法默認訪問級為public。
(4)接口使用原則:
①使用接口解決多繼承;
②使用接口為外部類添加功能;
③以面向對象的角度考慮,量一個類與生俱來的特征和行為和依賴于外部的可選特征和行為分離。
(5)類實現接口有2個選擇:
①實現接口中所定義的所有方法;
②聲明自己為抽象類。
使用關鍵字implements類實現接口,該關鍵字放在類聲明的extends部分之后
eg:
public class 類名 extends 父類名 implements 接口名
一個類可以實現多個接口,接口之間用逗號分隔。
implements 與 is a 都是繼承關系。
(6)使用接口的好處:
①將設計和實現分離,對外隱藏了實現;
②面向接口編程是OOP的核心。
1)抽象類可以提供成員方法的實現細節。
而接口中只能存在public abstract 方法;
2)抽象類中的成員變量可以是各種類型的。
而接口中的成員變量只能是public static final類型的;
3)接口中不能含有靜態代碼塊以及靜態方法。
而抽象類可以有靜態代碼塊和靜態方法;
4)一個類只能繼承一個抽象類。
而一個類卻可以實現多個接口。
1)抽象類是對一種事物的抽象,即對類抽象,而接口是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是接口卻是對類局部(行為)進行抽象。舉個簡單的例子,飛機和鳥是不同類的事物,但是它們都有一個共性,就是都會飛。那么在設計的時候,可以將飛機設計為一個類Airplane,將鳥設計為一個類Bird,但是不能將 飛行 這個特性也設計為類,因此它只是一個行為特性,并不是對一類事物的抽象描述。此時可以將 飛行 設計為一個接口Fly,包含方法fly( ),然后Airplane和Bird分別根據自己的需要實現Fly這個接口。然后至于有不同種類的飛機,比如戰斗機、民用飛機等直接繼承Airplane即可,對于鳥也是類似的,不同種類的鳥直接繼承Bird類即可。從這里可以看出,繼承是一個 "是不是"的關系,而 接口 實現則是 "有沒有"的關系。如果一個類繼承了某個抽象類,則子類必定是抽象類的種類,而接口實現則是有沒有、具備不具備的關系,比如鳥是否能飛(或者是否具備飛行這個特點),能飛行則可以實現這個接口,不能飛行就不實現這個接口。
2)設計層面不同,抽象類作為很多子類的父類,它是一種模板式設計。而接口是一種行為規范,它是一種輻射式設計。什么是模板式設計?最簡單例子,大家都用過ppt里面的模板,如果用模板A設計了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A,如果它們的公共部分需要改動,則只需要改動模板A就可以了,不需要重新對ppt B和ppt C進行改動。而輻射式設計,比如某個電梯都裝了某種報警器,一旦要更新報警器,就必須全部更新。也就是說對于抽象類,如果需要添加新的方法,可以直接在抽象類中添加具體的實現,子類可以不進行變更;而對于接口則不行,如果接口進行了變更,則所有實現這個接口的類都必須進行相應的改動。
有關java抽象類的更詳細文章請查看《兩分鐘教會你在java中定義一個抽象類屬性》、《我是類!超級無敵大帥哥花澤類的類!》
門和警報的例子:
門都有open( )和close( )兩個動作.
此時我們可以定義通過抽象類和接口來定義這個抽象概念:
public abstract class Door { public abstract void open(); public abstract void close(); } |
或者:
public interface Door { public abstract void open(); public abstract void close(); } |
但是現在如果我們需要門具有報警alarm( )的功能,那么該如何實現?
下面提供兩種思路:
1) 將這三個功能都放在抽象類里面,但是這樣一來所有繼承于這個抽象類的子類都具備了報警功能,但是有的門并不一定具備報警功能;
2) 將這三個功能都放在接口里面,需要用到報警功能的類就需要實現這個接口中的open( )和close( ),也許這個類根本就不具備open( )和close( )這兩個功能,比如火災報警器。
從這里可以看出, Door的open() 、close()和alarm()根本就屬于兩個不同范疇內的行為,open()和close()屬于門本身固有的行為特性,而alarm()屬于延伸的附加行為。因此最好的解決辦法是單獨將報警設計為一個接口,包含alarm()行為,Door設計為單獨的一個抽象類,包含open和close兩種行為。再設計一個報警門繼承Door類和實現Alarm接口。
public interface Alram { public void alarm(); } public abstract class Door { public abstract void open(); public abstract void close(); } public class AlarmDoor extends Door implements Alram { @Override public void alarm() { // TODO Auto-generated method stub } @Override public void open() { // TODO Auto-generated method stub } @Override public void close() { // TODO Auto-generated method stub } } |
到此,相信大家對“java繼承多態和抽象類接口知識點總結”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。