-
java抽象類
鎖定
Java語言中,用abstract 關鍵字來修飾一個類時,這個類叫作抽象類。抽象類是它的所有子類的公共屬性的集合,是包含一個或多個抽象方法的類。抽象類可以看作是對類的進一步抽象。在面向對象領域,抽象類主要用來進行類型隱藏。
- 中文名
- java抽象類
- 外文名
- java abstract class
- 含 義
- 使用了關鍵詞abstract聲明的類
- 作 用
- 將許多有關的類組織在一起
- 關鍵字
- abstract
- 所屬領域
- 計算機科學技術
java抽象類產生背景
人們往往用建立抽象類的方法為一組類提供統一的界面。抽象類的概念來源於現實生活之中。這就使我們能在一個更高、更抽象的級別上考慮問題,從而簡化了問題的複雜性。在Java程序中用抽象類(abstract class)來實現自然界的抽象概念。抽象類的作用在於將許多有關的類組織在一起,提供一個公共的類,而那些被組織在一起的具體的類作為其子類而派生出來。抽象類刻畫了公有行為的特徵,並通過繼承機制傳送給它的派生類。
抽象類是它的所有子類的公共屬性的集合,抽象類不一定有抽象方法,但有抽象方法的類一定是抽象類
[5]
。抽象類可以看作是對類的進一步抽象。首先從現實世界中的對象可以抽象出軟件系統中的對象(保留主要屬性和行為,去掉次要屬性和行為),然後從軟件系統中的對象可以抽象出軟件系統中的類(去掉屬性值,把具體的對象變成了抽象的概念),而抽象類則是對多個類的抽象結果,抽象類進一步描述了多個具體類的共同特徵和行為。從系統分析的角度,使用抽象類可以更好地刻畫自然界的抽象概念,更有效地完成軟件系統與自然行為系統的映射,從系統設計實現的角度,使用抽象類可以更好地利用這些共同屬性和操作,避免代碼的重複編寫,從而減少出錯的幾率,提高程序的開發效率。
[1]
java抽象類抽象方法
在抽象類中可以包含一般方法和抽象方法。抽象方法的定義與一般方法不同,抽象方法在方法頭後直接跟分號,而一般方法含有以大括號框住的方法體。所有的抽象方法必須存在於抽象類中。
在抽象類中定義的方法稱為抽象方法,這些方法只有方法頭的聲明,而用一個分號來代替方法體的定義,即只定義成員方法的接口形式,而沒有具體操作。只有派生類對抽象成員方法的重定義才能真正實現與該派生類相關的操作。在各子類繼承了父類的抽象方法之後,再分別用不同的語句和方法體來重新定義它,形成若干個名字相同、返回值相同、參數列表相同、目的一致但是具體實現有一定差別的方法。抽象類中定義抽象方法的目的是實現一個接口,即所有的子類對外都呈現一個相同名字的方法。
[2]
java抽象類實現方式
Java抽象類的實現是通過關鍵字abstract來説明的。其格式為:
[Modifies] abstract class ClassName {…}
其中,Modifies是修飾符,abstract是聲明抽象類的關鍵字,class是定義類的關鍵字,ClassName是類名,大括號內的省略號表示類體部分。其中的成員方法可以是一般的成員方法,還可以是抽象的成員方法。抽象的成員方法也是通過關鍵字abstract來説明的。它在形式上僅有方法的頭部分,而沒有方法體,甚至用於描述方法體的一對大括號也沒有,常將這樣的形式稱為方法的原型聲明。其格式如下:
[Modifies] abstract returnType methodName(parameterLists);
Modifies與上面的意義相同,abstract是聲明抽象方法的關鍵字,returnType是方法的返回值類型,圓括號中的parameterLists是參數列表。抽象方法顯然不是一個完整的方法,它也不完成任何具體的功能,只是用於提供一個接口,它只有在子類中進行覆蓋後才可使用,因此,抽象方法只能出現在抽象類中。
[3]
java抽象類特點
1)抽象類,其修飾符必須為public或者protected,不能是private,因為創建抽象類,就是要被其他類繼承,用private修飾了,則不能被子類繼承,子類便無法實現該方法。
2)抽象類不能用來創建對象,即抽象類不能被直接實例化,要通過其普通子類進行實例化。
3)如果一個普通子類繼承於一個抽象父類,則該類一定要重寫實現該父類的抽象方法。如果該子類仍然是一個抽象類,這也是允許的,就不必重寫實現該父類的抽象方法,但必須用abstract修飾。
4)抽象級別:抽象類是對整體類的抽象,包含屬性和方法。
5)實現類的範圍不同:抽象類,其實是從子類中提取共性部分,然後抽象出來,反之,子類繼承該父類就可以了,也就是説裏面的抽象方法一般來自同一個類別。
java抽象類使用注意
在使用抽象類與抽象方法時,應特別關注以下幾點:
1、凡是用abstract修飾符修飾的類被稱為抽象類。凡是用abstract修飾符修飾的方法稱為抽象方法。
2、抽象類中可以有零個或多個抽象方法,也可以包含非抽象的方法。·抽象類中可以沒有抽象方法,但是,有抽象方法的類必須是抽象類。
3、對於抽象方法來説,在抽象類中只指定其方法名及其類型,而不書寫其實現代碼。
4、抽象類可以派生子類,在抽象類派生的子類中必須實現抽象類中定義的所有抽象方法。
5、抽象類不能創建對象,創建對象的工作由抽象類派生的子類來實現。
6、如果父類中已有同名的abstract方法,則子類中就不能再有同名的抽象方法。
7、abstract不能與final並列修飾同一個類。
- 參考資料
-
- 1. 劉衞國主編.Java語言程序設計[M].北京:中國鐵道出版社,2016.09
- 2. 吳育鋒主編.Java面向對象編程[M].杭州:浙江大學出版社,2015.06
- 3. 楊厚羣主編..Java程序設計[M].北京:中國鐵道出版社,2015.08
- 4. 曾裕宗. 淺析Java抽象類與接口的區別[J]. 電腦知識與技術, 2017, 第13卷(36):202-203 .超星[引用日期2019-09-08]
- 5. 美斯坦福IT教育編著. SCCE軟件工程師 Java面向對象編程 第二階段[M]. 武漢:中國地質大學出版社, 2010.01.34