Java程序設(shè)計(jì)(三)_第1頁
Java程序設(shè)計(jì)(三)_第2頁
Java程序設(shè)計(jì)(三)_第3頁
Java程序設(shè)計(jì)(三)_第4頁
Java程序設(shè)計(jì)(三)_第5頁
已閱讀5頁,還剩96頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、山東科技大學(xué)信息科學(xué)與工程學(xué)院2n類、域、方法和實(shí)例對象類、域、方法和實(shí)例對象n繼承性繼承性n多態(tài)性多態(tài)性n包包(package)n封裝性封裝性n關(guān)鍵字關(guān)鍵字abstract、static、final和和thisn接口接口n內(nèi)部類內(nèi)部類n變量作用域范圍和參數(shù)傳遞方式變量作用域范圍和參數(shù)傳遞方式n面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想主要內(nèi)容n為什么需要面向?qū)ο缶幊??為什么需要面向?qū)ο缶幊蹋?2021-12-194面向?qū)ο蟪绦蛟O(shè)計(jì)整體介紹面向?qū)ο蟪绦蛟O(shè)計(jì)整體介紹n傳統(tǒng)的程序設(shè)計(jì)風(fēng)格存在著傳統(tǒng)的程序設(shè)計(jì)風(fēng)格存在著數(shù)據(jù)抽象簡單、信息完全暴露、數(shù)據(jù)抽象簡單、信息完全暴露、算法復(fù)雜、無法很好地

2、描述客觀世界等缺點(diǎn)算法復(fù)雜、無法很好地描述客觀世界等缺點(diǎn),可重用性差,可重用性差,如果軟件項(xiàng)目龐大,程序的調(diào)試和維護(hù)將變得異常困難如果軟件項(xiàng)目龐大,程序的調(diào)試和維護(hù)將變得異常困難。n面向?qū)ο蟮幕舅悸罚菏紫确治鰡栴}并建立相應(yīng)的對象,面向?qū)ο蟮幕舅悸罚菏紫确治鰡栴}并建立相應(yīng)的對象,然后通過這些對象以及它們之間的配合解決問題,是模擬然后通過這些對象以及它們之間的配合解決問題,是模擬現(xiàn)實(shí)生活求解的一般過程?,F(xiàn)實(shí)生活求解的一般過程。5面向?qū)ο蟾攀?2)n面向?qū)ο蟮幕舅悸访嫦驅(qū)ο蟮幕舅悸?對象對象表示現(xiàn)實(shí)世界中某個(gè)具體的事物事物。 事物事物可分為兩大部分 :物質(zhì)物質(zhì) : 表達(dá)具體的事物表達(dá)具體的事

3、物意識意識 : 描述抽象的概念描述抽象的概念現(xiàn)實(shí)問題空間現(xiàn)實(shí)問題空間 面向?qū)ο蠼饪臻g面向?qū)ο蠼饪臻g 物質(zhì)物質(zhì) 對象對象(客觀存在的客觀存在的) 意識意識 類類 (抽象的概念抽象的概念)2021-12-196類的定義類的定義class People int mouth; int hand; int foot; void walk() void stand() void speak() 計(jì)算機(jī)中計(jì)算機(jī)中的對象的原型的對象的原型 現(xiàn)實(shí)生活現(xiàn)實(shí)生活中的對象中的對象2021-12-197class Car int engine; int wheel; void run() void stop() voi

4、d slowDown() void backward() 計(jì)算機(jī)中計(jì)算機(jī)中的對象的原型的對象的原型 現(xiàn)實(shí)生活現(xiàn)實(shí)生活中的對象中的對象類的定義類的定義8面向?qū)ο蟾攀?3)n面向?qū)ο蟮某绦蛟O(shè)計(jì)面向?qū)ο蟮某绦蛟O(shè)計(jì)(OOP,Object Oriented Programming) 將將數(shù)據(jù)數(shù)據(jù)(屬性屬性)和和方法方法(行為或功能行為或功能)封裝封裝到類到類(classes)中:中:數(shù)據(jù)數(shù)據(jù)與與方法方法常常是緊密相關(guān)的。常常是緊密相關(guān)的。對象對象(objects): 類的實(shí)例對象或類本身類的實(shí)例對象或類本身三個(gè)基本特性:三個(gè)基本特性:封裝性封裝性、繼承性繼承性和和多態(tài)性多態(tài)性9面向?qū)ο蟾攀?4)n結(jié)構(gòu)化

5、程序設(shè)計(jì)n對應(yīng)的典型的計(jì)算機(jī)語言對應(yīng)的典型的計(jì)算機(jī)語言, 例如例如: Cn面向面向操作操作(action)的的n函數(shù)函數(shù)(方法方法)是程序的基本單位是程序的基本單位n面向?qū)ο蟪绦蛟O(shè)計(jì)n對應(yīng)的典型的計(jì)算機(jī)語言對應(yīng)的典型的計(jì)算機(jī)語言, 例如例如: Java、C+n面向面向?qū)ο髮ο?object)的的n類類(class)是程序的基本單位是程序的基本單位n方法方法(函數(shù)函數(shù))被封裝在類中被封裝在類中n數(shù)據(jù)也常常被封裝在類中數(shù)據(jù)也常常被封裝在類中10n面向?qū)ο蟾攀雒嫦驅(qū)ο蟾攀鰊繼承性繼承性n多態(tài)性多態(tài)性n包包(package)n封裝性封裝性n關(guān)鍵字關(guān)鍵字abstract、static、final和和th

6、isn接口接口n內(nèi)部類內(nèi)部類n變量作用域范圍和參數(shù)傳遞方式變量作用域范圍和參數(shù)傳遞方式n面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想主要內(nèi)容11類、域、方法和實(shí)例對象(1)n類(class)本身也是一種對象n類(class)同時(shí)也是實(shí)例對象的模板n類(class) 的基本組成:(成員)域和(成員)方法 n每個(gè)對象:擁有內(nèi)存存儲成員域成員域/方法方法n靜態(tài)的成員靜態(tài)的成員域域/方法方法屬于類屬于類n其它成員其它成員域域/方法方法屬于實(shí)例對象屬于實(shí)例對象12類、域、方法和實(shí)例對象(2)n類定義的語法格式如下:類修飾詞列表類修飾詞列表 class 類名類名 extends 父類名父類名 impl

7、ements 接口名稱列表接口名稱列表 類體類體public class J_Teacher extends J_Employee public int m_classHour; / 授課的課時(shí)授課的課時(shí) public J_Teacher( ) m_classHour = 96; / J_Teacher構(gòu)造方法結(jié)束構(gòu)造方法結(jié)束 public void mb_printInfo( ) System.out.println(該教師的工作年限為該教師的工作年限為 + m_workYear); System.out.println(該教師授課的課時(shí)為該教師授課的課時(shí)為 + m_classHour);

8、/ 方法方法mb_printInfo結(jié)束結(jié)束 / 類類J_Teacher結(jié)束結(jié)束P6713類、域、方法和實(shí)例對象(3)n類類定義的語法格式如下:類修飾詞列表類修飾詞列表 class 類名類名 extends 父類名父類名 implements 接口名稱列表接口名稱列表 類體類體說明:說明:1)方括號)方括號 表示可選項(xiàng)表示可選項(xiàng);2)類修飾詞包括:)類修飾詞包括:public, protected, private, abstract, final, strictfp;3)如果類修飾詞列表包括如果類修飾詞列表包括public,則該類的命名須與所在的文件同名;,則該類的命名須與所在的文件同名;4

9、)如果類修飾詞列表不包括)如果類修飾詞列表不包括public,則該類只能在當(dāng)前的軟件包使用則該類只能在當(dāng)前的軟件包使用;5)同一個(gè))同一個(gè)Java源文件可以包含多個(gè)類,源文件可以包含多個(gè)類,但是不能有兩個(gè)或兩個(gè)以上類但是不能有兩個(gè)或兩個(gè)以上類的修飾詞包括的修飾詞包括public;6)extends表示繼承某一父類;表示繼承某一父類;7)implements表示實(shí)現(xiàn)一個(gè)或多個(gè)接口;表示實(shí)現(xiàn)一個(gè)或多個(gè)接口;8)類體定義包括:)類體定義包括:構(gòu)造方法構(gòu)造方法,成員域成員域(Field),成員方法成員方法(method)。這三。這三者出現(xiàn)的順序沒有限制。者出現(xiàn)的順序沒有限制。14類、域、方法和實(shí)例對象

10、(4)n類的成員域類的成員域(Field)通常用來表示和存儲類所需要的數(shù)據(jù),定義格式如下:成員域修飾詞列表成員域修飾詞列表 類型類型 變量名或帶初始化的變量名列表變量名或帶初始化的變量名列表說明:說明:1)域修飾詞為可選項(xiàng)包括:)域修飾詞為可選項(xiàng)包括:public, protected, private, static, final, transient, volatile;2)static表示當(dāng)前成員域是靜態(tài)的;表示當(dāng)前成員域是靜態(tài)的;3)final表示該成員在首次賦值之后不能再修改;表示該成員在首次賦值之后不能再修改;4)transient表示該成員域是暫時(shí)的,在對象保存時(shí)可以不進(jìn)行保存;

11、表示該成員域是暫時(shí)的,在對象保存時(shí)可以不進(jìn)行保存;5)volatile表示多線程程序中,訪問該成員域?qū)⒉捎猛綑C(jī)制。表示多線程程序中,訪問該成員域?qū)⒉捎猛綑C(jī)制。15類、域、方法和實(shí)例對象(5)n類的成員方法類的成員方法(Method)通常用來實(shí)現(xiàn)類所需要的各種功能,定義格式如下:方法修飾詞列表方法修飾詞列表 返回類型返回類型 方法名方法名(方法的參數(shù)列表方法的參數(shù)列表) 方法體方法體說明:說明:1)方法修飾詞包括:)方法修飾詞包括:public, protected, private, abstract, static, final, synchronized和和strictfp;2)abs

12、tract表示當(dāng)前方法是抽象成員方法,表示當(dāng)前方法是抽象成員方法,不能有方法體不能有方法體;3)static表示當(dāng)前方法是靜態(tài)成員方法;表示當(dāng)前方法是靜態(tài)成員方法;4)final表示表示當(dāng)前方法所在類的子類不能出現(xiàn)同名方法當(dāng)前方法所在類的子類不能出現(xiàn)同名方法;5)synchronized表示當(dāng)前方法是同步成員方法;表示當(dāng)前方法是同步成員方法;6)返回類型可以是)返回類型可以是void、基本數(shù)據(jù)類型基本數(shù)據(jù)類型和和引用數(shù)據(jù)類型引用數(shù)據(jù)類型;7)參數(shù)格式為:)參數(shù)格式為:多個(gè)參數(shù)用逗號隔開;多個(gè)參數(shù)用逗號隔開;8)在方法無參數(shù)時(shí),也)在方法無參數(shù)時(shí),也不能將方法的參數(shù)列表寫成不能將方法的參數(shù)列表寫

13、成void;public static void main( string args )類、域、方法和實(shí)例對象(4)volatile與與synchronized區(qū)別:區(qū)別:1)volatile本質(zhì)是在告訴本質(zhì)是在告訴jvm當(dāng)前變量在寄存器中的值是不確當(dāng)前變量在寄存器中的值是不確定的定的,需要從主存中讀取需要從主存中讀取,synchronized則是鎖定當(dāng)前變量則是鎖定當(dāng)前變量,只有只有當(dāng)前線程可以訪問該變量當(dāng)前線程可以訪問該變量,其他線程被阻塞住其他線程被阻塞住.2)volatile僅能使用在變量級別僅能使用在變量級別,synchronized則可以使用在變則可以使用在變量量,方法方法.3)v

14、olatile僅能實(shí)現(xiàn)變量的修改可見性僅能實(shí)現(xiàn)變量的修改可見性,但不具備原子特性但不具備原子特性,而而synchronized則可以保證變量的修改可見性和原子性則可以保證變量的修改可見性和原子性.4)volatile不會造成線程的阻塞不會造成線程的阻塞,而而synchronized可能會造成線可能會造成線程的阻塞程的阻塞.5)volatile標(biāo)記的變量不會被編譯器優(yōu)化標(biāo)記的變量不會被編譯器優(yōu)化,而而synchronized標(biāo)記標(biāo)記的變量可以被編譯器優(yōu)化的變量可以被編譯器優(yōu)化.17類、域、方法和實(shí)例對象(6)n類的構(gòu)造方法類的構(gòu)造方法用來實(shí)現(xiàn)類所需要的各種初始化功能,定義格式如下:構(gòu)造方法修飾詞

15、列表構(gòu)造方法修飾詞列表 方法名方法名(方法的參數(shù)列表方法的參數(shù)列表) 方法體方法體說明:說明:1)構(gòu)造方法修飾詞包括:)構(gòu)造方法修飾詞包括:public, protected, private;2)構(gòu)造方法名必須與類名相同構(gòu)造方法名必須與類名相同;3)構(gòu)造方法沒有返回類型,也不能寫成構(gòu)造方法沒有返回類型,也不能寫成void;4)每個(gè)類都至少有一個(gè)構(gòu)造方法,如果沒有顯式定義,則系統(tǒng)為自動為)每個(gè)類都至少有一個(gè)構(gòu)造方法,如果沒有顯式定義,則系統(tǒng)為自動為 該類定義一個(gè)不該類定義一個(gè)不含參數(shù)的默認(rèn)構(gòu)造方法;含參數(shù)的默認(rèn)構(gòu)造方法;如果有顯式定義,則系統(tǒng)不會創(chuàng)建默認(rèn)的構(gòu)造方法如果有顯式定義,則系統(tǒng)不會創(chuàng)建

16、默認(rèn)的構(gòu)造方法;創(chuàng)建類實(shí)例對象的格式如下:創(chuàng)建類實(shí)例對象的格式如下:new 構(gòu)造方法名構(gòu)造方法名(構(gòu)造方法調(diào)用參數(shù)列表構(gòu)造方法調(diào)用參數(shù)列表)18類、域、方法和實(shí)例對象(7)n類引用:類引用:使用使用引用數(shù)據(jù)類型引用數(shù)據(jù)類型來引用類來引用類(P62)。定。定義格式如下:義格式如下:類名類名 變量名或帶初始化的變量名列表變量名或帶初始化的變量名列表例如:例如:Integer a = new Integer(11);說明:說明:1)其中)其中a是引用數(shù)據(jù)類型變量;是引用數(shù)據(jù)類型變量;2)引用數(shù)據(jù)類型變量也包括)引用數(shù)據(jù)類型變量也包括4個(gè)屬性:個(gè)屬性:變量名、數(shù)據(jù)類型、存儲單元變量名、數(shù)據(jù)類型、存儲單

17、元和和值值;變量變量a.類類Integer的實(shí)例對象的實(shí)例對象變量變量a的存儲示意圖的存儲示意圖19類、域、方法和實(shí)例對象(8)n類實(shí)例對象的構(gòu)造,類實(shí)例對象的構(gòu)造,構(gòu)造一個(gè)實(shí)例對象的過程如構(gòu)造一個(gè)實(shí)例對象的過程如下:下:n1)首先內(nèi)存中創(chuàng)建該實(shí)例對象;)首先內(nèi)存中創(chuàng)建該實(shí)例對象;n2)然后初始化帶初始化值的成員域;)然后初始化帶初始化值的成員域;n3)調(diào)用構(gòu)造方法完成實(shí)例對象的初始化工作。)調(diào)用構(gòu)造方法完成實(shí)例對象的初始化工作。n4)構(gòu)造完畢后,可以通過實(shí)例對象的引用來訪問該實(shí))構(gòu)造完畢后,可以通過實(shí)例對象的引用來訪問該實(shí)例對象的成員域和成員方法,具體格式如下:例對象的成員域和成員方法,具體

18、格式如下:引用變量名引用變量名.成員域名成員域名引用變量名引用變量名.成員方法名成員方法名例如:例如: Value( )注:構(gòu)造時(shí)各種類型的默認(rèn)值注:構(gòu)造時(shí)各種類型的默認(rèn)值: 基本數(shù)值類型基本數(shù)值類型: 0; boolean: false; 引用數(shù)據(jù)類型引用數(shù)據(jù)類型: null20類、域、方法和實(shí)例對象(9)n類實(shí)例對象的銷毀類實(shí)例對象的銷毀(P63):在:在java語言中,對類的語言中,對類的實(shí)例對象內(nèi)存的回收是通過實(shí)例對象內(nèi)存的回收是通過垃圾回收機(jī)制垃圾回收機(jī)制完成的。完成的。n1)不被Java程序使用的內(nèi)存成為垃圾垃圾(garbage)。n2)對于一個(gè)實(shí)例對象,如果沒有引用指向

19、它,那么該實(shí)例對象所占據(jù)的內(nèi)存就成為了垃圾。例如:n3)Java虛擬機(jī)會使用一定的算法來回收這些垃圾,但并不保證先申請的但并不保證先申請的存儲單元會被先釋放存儲單元會被先釋放。n4)通過直接調(diào)用Java API中類System的方法gc()方法可以申請盡快回收(Garbage Collecting)。n5)每個(gè)類都含有一個(gè)每個(gè)類都含有一個(gè)finalize()的成員方法的成員方法,在實(shí)例對象內(nèi)存被回收之前,在實(shí)例對象內(nèi)存被回收之前,會調(diào)用該方法。會調(diào)用該方法。該方法是類java.lang.object的成員方法。Integer a = new Integer(11);a = null; 此時(shí)創(chuàng)建

20、的此時(shí)創(chuàng)建的Integer實(shí)例實(shí)例對象成為垃圾。對象成為垃圾。21類、域、方法和實(shí)例對象(10)n類實(shí)例對象的生命周期:類實(shí)例對象的生命周期:從創(chuàng)建、使用、廢棄到從創(chuàng)建、使用、廢棄到回收的整個(gè)過程。以下是生命周期的例子:回收的整個(gè)過程。以下是生命周期的例子:J_Finalized.java其中:其中:J_Book(2)和和J_Book(3)的內(nèi)存會被立即回收,的內(nèi)存會被立即回收,而有引用而有引用book1的的J_Book(1) 則會在程序執(zhí)行完后被回收內(nèi)存則會在程序執(zhí)行完后被回收內(nèi)存。22n面向?qū)ο蟾攀雒嫦驅(qū)ο蟾攀鰊類、域、方法和實(shí)例對象類、域、方法和實(shí)例對象n多態(tài)性多態(tài)性n包包(packag

21、e)n封裝性封裝性n關(guān)鍵字關(guān)鍵字abstract、static、final和和thisn接口接口n內(nèi)部類內(nèi)部類n變量作用域范圍和參數(shù)傳遞方式變量作用域范圍和參數(shù)傳遞方式n面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想主要內(nèi)容23繼承性(1)n面向?qū)ο蟮娜筇匦悦嫦驅(qū)ο蟮娜筇匦裕豪^承性,:繼承性,多態(tài)性和封裝性多態(tài)性和封裝性。n問題:為什么要有繼承性?問題:為什么要有繼承性?-節(jié)省工作量,提高效率。節(jié)省工作量,提高效率。n繼承性:繼承性:軟件重用的一種方法,其定義格式如下:軟件重用的一種方法,其定義格式如下:n所有類都有一個(gè)默認(rèn)的父類:所有類都有一個(gè)默認(rèn)的父類:java.lang.objec

22、t。n繼承具有繼承具有傳遞性傳遞性:類:類A的父類為類的父類為類B,類,類B的父類為類的父類為類C ,則類則類C可稱為類可稱為類A的父類。的父類。類修飾詞列表類修飾詞列表 class 類名類名 extends 父類名父類名 implements 接口名稱列表接口名稱列表 類體類體24繼承性(2)n類繼承可通過關(guān)鍵詞類繼承可通過關(guān)鍵詞extends或或implements來實(shí)現(xiàn)。來實(shí)現(xiàn)。nextends只能指定一個(gè)父類(只能指定一個(gè)父類(java.lang.object除外),除外),該父類稱為直接父類。nimplements可實(shí)現(xiàn)多個(gè)接口。n子類和父類的構(gòu)造方法之間存在如下子類和父類的構(gòu)造方法

23、之間存在如下約束關(guān)系約束關(guān)系:n子類的構(gòu)造方法必須調(diào)用父類的構(gòu)造方法必須調(diào)用父類的構(gòu)造方法,并且該語句必須是子類構(gòu)造方法的第一條語句。調(diào)用格式如下:super(參數(shù)列表參數(shù)列表)其中:其中:1)super為關(guān)鍵字,為關(guān)鍵字,參數(shù)列表須與父類的某個(gè)構(gòu)造方法相匹配參數(shù)列表須與父類的某個(gè)構(gòu)造方法相匹配。2)如果在子類構(gòu)造方法里沒有書寫調(diào)用父類構(gòu)造方法的)如果在子類構(gòu)造方法里沒有書寫調(diào)用父類構(gòu)造方法的super語句,則語句,則java虛擬機(jī)會虛擬機(jī)會自動隱式地自動隱式地在子類構(gòu)造方法的在子類構(gòu)造方法的最前面插入最前面插入super()語句語句;此時(shí)如果;此時(shí)如果父類沒有不含任何參數(shù)的構(gòu)造方法,則編譯將

24、出錯(cuò)。父類沒有不含任何參數(shù)的構(gòu)造方法,則編譯將出錯(cuò)。25繼承性(3)n類繼承的示例類繼承的示例(J_Teacher.java):職工和教師之間的繼承。:職工和教師之間的繼承。class J_Employee public int m_workYear; / 工作的年限工作的年限 public J_Employee( ) m_workYear = 1; / J_Employee構(gòu)造方法結(jié)束構(gòu)造方法結(jié)束 / 類類J_Employee結(jié)束結(jié)束繼承于繼承于public class J_Teacher extends J_Employee public int m_classHour; / 授課的課時(shí)授

25、課的課時(shí) public J_Teacher( ) m_classHour = 96; / J_Teacher構(gòu)造方法結(jié)束構(gòu)造方法結(jié)束 public void mb_printInfo( ) System.out.println(該教師的工作年限為該教師的工作年限為 + m_workYear); System.out.println(該教師授課的課時(shí)為該教師授課的課時(shí)為 + m_classHour); / 方法方法mb_printInfo結(jié)束結(jié)束 public static void main(String args ) J_Teacher tom = new J_Teacher( ); tom

26、.mb_printInfo( ); / 方法方法main結(jié)束結(jié)束 / 類類J_Teacher結(jié)束結(jié)束26繼承性(4)n子類和父類之間的轉(zhuǎn)換規(guī)則:子類和父類之間的轉(zhuǎn)換規(guī)則:n1)隱式轉(zhuǎn)換隱式轉(zhuǎn)換:子類型的數(shù)據(jù)子類型的數(shù)據(jù)轉(zhuǎn)換為父類型的數(shù)據(jù)父類型的數(shù)據(jù),此時(shí)可以不需不需要要強(qiáng)制轉(zhuǎn)換符號“( )”, 例如:J_Teacher tom=new J_Teacher();J_Employee a=tom;System.out.println( (J_Employee)tom ).m_workYear);不能寫成不能寫成: (J_Employee)tom.m_workYear,這樣編譯器會理解成將這樣編譯器

27、會理解成將tom.m_workYear強(qiáng)制轉(zhuǎn)換成強(qiáng)制轉(zhuǎn)換成J_Employee對象,會導(dǎo)致編譯錯(cuò)誤。對象,會導(dǎo)致編譯錯(cuò)誤。27繼承性(5)n子類和父類之間的轉(zhuǎn)換規(guī)則:子類和父類之間的轉(zhuǎn)換規(guī)則:n2)顯式轉(zhuǎn)換顯式轉(zhuǎn)換:父類型的數(shù)據(jù)父類型的數(shù)據(jù)轉(zhuǎn)換為子類型的數(shù)據(jù)子類型的數(shù)據(jù),此時(shí)需要需要強(qiáng)制轉(zhuǎn)換符號“( )”, 例如:J_Teacher tom=new J_Teacher();J_Employee a=tom;J_Teacher b=(J_Teacher) a;J_Employee a=new J_Employee();J_Teacher b=(J_Teacher) a;此時(shí)無法從此時(shí)無法從a引用

28、的實(shí)例對象得到引用的實(shí)例對象得到J_Teacher的實(shí)例對象。的實(shí)例對象。28繼承性(6)n子類和父類之間的轉(zhuǎn)換規(guī)則:子類和父類之間的轉(zhuǎn)換規(guī)則:n3)如果兩個(gè)類型之間不存在子類型和父類型之間的關(guān)系,則一般如果兩個(gè)類型之間不存在子類型和父類型之間的關(guān)系,則一般不能進(jìn)行轉(zhuǎn)換。不能進(jìn)行轉(zhuǎn)換。J_Teacher tom=new J_Teacher( );System.out.println(String)tom);此時(shí)類此時(shí)類J_Teacher和類和類String之間不存在子類和父類的關(guān)系。之間不存在子類和父類的關(guān)系。29繼承性(7)n子類實(shí)例對象和父類實(shí)例對象之間的關(guān)系:子類實(shí)例對象和父類實(shí)例對象之

29、間的關(guān)系:n子類的實(shí)例對象子類的實(shí)例對象是是父類的實(shí)例對象;父類的實(shí)例對象;n父類的實(shí)例對象父類的實(shí)例對象一般不是一般不是子類的實(shí)例對象;子類的實(shí)例對象;n判斷一個(gè)引用表達(dá)式所指向的實(shí)例對象是否是某種引用類型的實(shí)判斷一個(gè)引用表達(dá)式所指向的實(shí)例對象是否是某種引用類型的實(shí)例對象可通過例對象可通過instanceof運(yùn)算符運(yùn)算符來實(shí)現(xiàn),具體格式如下來實(shí)現(xiàn),具體格式如下:引用類型表達(dá)式引用類型表達(dá)式 instanceof 引用類型引用類型說明:說明: 當(dāng)當(dāng)引用類型表達(dá)式不是引用類型表達(dá)式不是null且所指對象為指定的引用類型且所指對象為指定的引用類型時(shí)返回時(shí)返回true;否則返回;否則返回false。

30、30繼承性(8)n子類實(shí)例對象和父類實(shí)例對象之間的關(guān)系:子類實(shí)例對象和父類實(shí)例對象之間的關(guān)系:ninstanceof舉例:舉例:J_Teacher a=new J_Teacher( );J_Employee b=new J_Employee();J_Employee c=a;定義:定義:a instanceof J_Teachera instanceof J_Employeeb instanceof J_Teacherc instanceof J_Employeec instanceof J_Teacher類型判斷:類型判斷:返回返回true返回返回true返回返回false返回返回true返

31、回返回true31繼承性(9)n子類實(shí)例對象和父類實(shí)例對象之間的關(guān)系:子類實(shí)例對象和父類實(shí)例對象之間的關(guān)系:n使用使用instanceof以避免運(yùn)行時(shí)的類型轉(zhuǎn)換錯(cuò)誤:以避免運(yùn)行時(shí)的類型轉(zhuǎn)換錯(cuò)誤:J_Teacher b=(J_Teacher)a;if (a instanceof J_Teacher) b=(J_Teacher)a;else b=new J_Teacher();此時(shí)可能存在運(yùn)行時(shí)錯(cuò)誤,此時(shí)可能存在運(yùn)行時(shí)錯(cuò)誤,因?yàn)橐驗(yàn)閍可能不能被強(qiáng)制轉(zhuǎn)換可能不能被強(qiáng)制轉(zhuǎn)換為為J_Teacher。例如:。例如:建議寫成上述形式。建議寫成上述形式。J_Employee a=new J_Employee(

32、);32n面向?qū)ο蟾攀雒嫦驅(qū)ο蟾攀鰊類、域、方法和實(shí)例對象類、域、方法和實(shí)例對象n繼承性繼承性n包包(package)n封裝性封裝性n關(guān)鍵字關(guān)鍵字abstract、static、final和和thisn接口接口n內(nèi)部類內(nèi)部類n變量作用域范圍和參數(shù)傳遞方式變量作用域范圍和參數(shù)傳遞方式n面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想主要內(nèi)容33多態(tài)性(1)n面向?qū)ο蟮娜筇匦裕豪^承性,面向?qū)ο蟮娜筇匦裕豪^承性,多態(tài)性多態(tài)性和封裝性。和封裝性。n問題:為什么要有問題:為什么要有多態(tài)性多態(tài)性?-龍生九種龍生九種,同一類,同一類事物可能有多種表現(xiàn)形式。事物可能有多種表現(xiàn)形式。n多態(tài)性:也是軟件重用的

33、一種技術(shù),具體實(shí)現(xiàn)方多態(tài)性:也是軟件重用的一種技術(shù),具體實(shí)現(xiàn)方法如下:法如下:n多個(gè)構(gòu)造方法;n多個(gè)同名的成員方法(包括子類中出現(xiàn)與其父類同名包括子類中出現(xiàn)與其父類同名的成員方法的成員方法)n多態(tài)性包括兩種類型:多態(tài)性包括兩種類型:靜態(tài)多態(tài)性靜態(tài)多態(tài)性和和動態(tài)多態(tài)性動態(tài)多態(tài)性。34多態(tài)性(2)n靜態(tài)多態(tài)性靜態(tài)多態(tài)性:指同一個(gè)類中同名方法在功能上的重載指同一個(gè)類中同名方法在功能上的重載(Overload) 。具體說明如下:。具體說明如下:n1)方法可以是構(gòu)造方法構(gòu)造方法和成員方法成員方法;n2)重載方法包括子類對其父類同名方法的功能重載子類對其父類同名方法的功能重載;n3)重載方法的參數(shù)列表必須

34、不相同,包括參數(shù)個(gè)數(shù)參數(shù)個(gè)數(shù)、參參數(shù)類型數(shù)類型或參數(shù)的數(shù)據(jù)類型排序參數(shù)的數(shù)據(jù)類型排序不同;如果僅是方法參數(shù)如果僅是方法參數(shù)變量名不同,則不能稱之為重載,且編譯會報(bào)錯(cuò)變量名不同,則不能稱之為重載,且編譯會報(bào)錯(cuò)。n4)重載方法的功能一般具有相似性。35多態(tài)性(3)n靜態(tài)多態(tài)性靜態(tài)多態(tài)性舉例(舉例(J_Student.java,P71):public class J_Student public int m_id; / 學(xué)號學(xué)號 public int m_age; / 年齡年齡 public J_Student( ) mb_setData(2008010400, 19); / J_Student構(gòu)造

35、方法結(jié)束構(gòu)造方法結(jié)束 public J_Student( int id, int age ) mb_setData(id, age); / J_Student構(gòu)造方法結(jié)束構(gòu)造方法結(jié)束 public void mb_setData( int id, int age ) m_id = id; m_age = age; / 方法方法mb_setData結(jié)束結(jié)束 public void mb_setData( int id ) m_id = id; / 方法方法mb_setData結(jié)束結(jié)束 public static void main(String args ) J_Student jack = n

36、ew J_Student( ); jack.mb_setData(2008010408); J_Student lisa = new J_Student( ); lisa.mb_setData(2008010428, 18); System.out.print(Jack的學(xué)號是的學(xué)號是 + jack.m_id); System.out.println(,年齡是,年齡是 + jack.m_age); System.out.print(Lisa的學(xué)號是的學(xué)號是 + lisa.m_id); System.out.println(,年齡是,年齡是 + lisa.m_age); / 方法方法main結(jié)束

37、結(jié)束 / 類類J_Student結(jié)束結(jié)束36多態(tài)性(4)n動態(tài)多態(tài)性動態(tài)多態(tài)性:子類和父類定義了子類和父類定義了具有相同基本聲明具有相同基本聲明的的非靜態(tài)非靜態(tài)成員成員方法方法 (即方法修飾詞不包括(即方法修飾詞不包括static)。這種也稱為是子類成員方法對父類成)。這種也稱為是子類成員方法對父類成員方法的員方法的覆蓋覆蓋(Override)。具體說明如下:。具體說明如下:n1)動態(tài)多態(tài)性只針對非靜態(tài)的成員方法,靜態(tài)的成員方法不具有動靜態(tài)的成員方法不具有動態(tài)多態(tài)性。態(tài)多態(tài)性。n2)子類方法和父類方法的返回類型、參數(shù)個(gè)數(shù)、參數(shù)類型和參數(shù)數(shù)據(jù)類型的排序均須相同;n3)子類方法的訪問控制方式一般一

38、般比父類要廣,成員的訪問控制方式包括4種:public, protected, 默認(rèn)模式和private。n4)利用動態(tài)多態(tài)性可以通過父類型的引用父類型的引用來調(diào)用來調(diào)用子類型的覆蓋成員子類型的覆蓋成員方法方法。n5)動態(tài)多態(tài)性一般需要在運(yùn)行時(shí)由Java虛擬機(jī)來識別到底是調(diào)用子調(diào)用子類的覆蓋成員方法類的覆蓋成員方法還是調(diào)用父類的成員方法調(diào)用父類的成員方法,這種特征稱為動態(tài)性動態(tài)性。37多態(tài)性(5)n動態(tài)多態(tài)性示例動態(tài)多態(tài)性示例(J_Teacher.java,P73)class J_Employee public int m_workYear; / 工作的年限工作的年限 public J_Emp

39、loyee( ) m_workYear = 1; / J_Employee構(gòu)造方法結(jié)束構(gòu)造方法結(jié)束 public void mb_printInfo( ) System.out.println(該教師的工作年限為該教師的工作年限為 + m_workYear); / 方法方法mb_printInfo結(jié)束結(jié)束 / 類類J_Employee結(jié)束結(jié)束public class J_Teacher1 extends J_Employee public int m_classHour; / 授課的課時(shí)授課的課時(shí) public J_Teacher1( ) m_classHour = 96; / J_Teach

40、er構(gòu)造方法結(jié)束構(gòu)造方法結(jié)束 public void mb_printInfo( ) System.out.println(該教師的工作年限為該教師的工作年限為 + m_workYear); System.out.println(該教師授課的課時(shí)為該教師授課的課時(shí)為 + m_classHour); / 方法方法mb_printInfo結(jié)束結(jié)束 public static void main(String args ) J_Employee a=new J_Employee(); a.mb_printInfo(); a=new J_Teacher1(); a.mb_printInfo(); /

41、方法方法main結(jié)束結(jié)束 / 類類J_Teacher結(jié)束結(jié)束38n動態(tài)多態(tài)性中動態(tài)多態(tài)性中在子類成員方法中訪問父類中的成員方法在子類成員方法中訪問父類中的成員方法(P75):通過使用:通過使用super關(guān)鍵字來實(shí)現(xiàn),調(diào)用格式如下:關(guān)鍵字來實(shí)現(xiàn),調(diào)用格式如下:n同理,也可以同理,也可以super關(guān)鍵字關(guān)鍵字在子類的非靜態(tài)成員方法中在子類的非靜態(tài)成員方法中訪問訪問父類的父類的成員域成員域,調(diào)用格式如下:,調(diào)用格式如下:n與與super相對應(yīng)的相對應(yīng)的this關(guān)鍵字關(guān)鍵字,this可用于在可用于在當(dāng)前類的非靜態(tài)當(dāng)前類的非靜態(tài)成員方法成員方法中調(diào)用中調(diào)用本類本類的的成員域成員域或或成員方法成員方法。多

42、態(tài)性(6)super.父類的成員方法父類的成員方法(參數(shù)列表參數(shù)列表)super.父類的成員域父類的成員域說明:此時(shí)父類的成員域說明:此時(shí)父類的成員域既可以靜態(tài)的,也可以是既可以靜態(tài)的,也可以是非靜態(tài)非靜態(tài)的的。39n面向?qū)ο蟾攀雒嫦驅(qū)ο蟾攀鰊類、域、方法和實(shí)例對象類、域、方法和實(shí)例對象n繼承性繼承性n多態(tài)性多態(tài)性n包包(package)n關(guān)鍵字關(guān)鍵字abstract、static、final和和thisn接口接口n內(nèi)部類內(nèi)部類n變量作用域范圍和參數(shù)傳遞方式變量作用域范圍和參數(shù)傳遞方式n面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想主要內(nèi)容40封裝性(1)n面向?qū)ο蟮娜筇匦裕豪^承性,多態(tài)性

43、和面向?qū)ο蟮娜筇匦裕豪^承性,多態(tài)性和封裝性封裝性。n問題:為什么要有封裝性?問題:為什么要有封裝性?訪問控制訪問控制,透明操作透明操作n封裝性封裝性:通過封裝性:通過封裝性可屏蔽各個(gè)模塊可屏蔽各個(gè)模塊(對象對象)的內(nèi)的內(nèi)部具體實(shí)現(xiàn)方式部具體實(shí)現(xiàn)方式,對外僅表現(xiàn)為,對外僅表現(xiàn)為成員的調(diào)用成員的調(diào)用。n對于對于類(非內(nèi)部類)類(非內(nèi)部類)的訪問控制方式有兩種的訪問控制方式有兩種:公公共模式共模式(public)和和默認(rèn)模式默認(rèn)模式(default)。n對于對于類成員類成員的訪問控制方式有四種的訪問控制方式有四種:公共模式公共模式(public),保護(hù)模式保護(hù)模式(protected),默認(rèn)模式默

44、認(rèn)模式(default)和和私有模式私有模式(private)。41封裝性(2)n類(非內(nèi)部類)類(非內(nèi)部類)的訪問控制方式有兩種的訪問控制方式有兩種:公共模公共模式式(public)和和默認(rèn)模式默認(rèn)模式(default)。n公共模式公共模式:類修飾詞有public則該類訪問控制方式為“公共模式”,即該類可被所有軟件包使用該類可被所有軟件包使用。例如:n默認(rèn)模式默認(rèn)模式:類修飾詞沒有public, protected和private,則該類訪問控制方式為“默認(rèn)模式”,即該類只能在同該類只能在同一個(gè)軟件包內(nèi)部使用一個(gè)軟件包內(nèi)部使用。public class J_Teacher extends J

45、_Employee42封裝性(3)n類成員類成員的訪問控制方式有四種的訪問控制方式有四種:公共模式公共模式(public), 保保護(hù)模式護(hù)模式(protected),默認(rèn)模式默認(rèn)模式(default)和和私有模式私有模式(private)。類類成員成員的具體訪問控制如下(的具體訪問控制如下(P83):):說明:說明:要訪問類成員,首先要確保類可訪問要訪問類成員,首先要確保類可訪問。43封裝性(4)n類成員類成員的的public訪問控制方式訪問控制方式(P82):public class J_Employee public int m_workYear; / 工作的年限工作的年限 public

46、J_Employee( ) m_workYear = 1; / J_Employee構(gòu)造方法結(jié)束構(gòu)造方法結(jié)束 public void mb_printInfo( ) System.out.println(該職工的工作年限該職工的工作年限為為 + m_workYear); / 方法方法mb_printInfo結(jié)束結(jié)束 / 類類J_Employee結(jié)束結(jié)束44封裝性(5)n類成員類成員的的protected訪問控制方式(訪問控制方式(P82)n1)類所在軟件包類所在軟件包的所有類的定義體所有類的定義體均可訪問;n2)當(dāng)該成員所在類的訪問控制方式為公共模式類的訪問控制方式為公共模式時(shí),則其他軟件包中

47、能訪問該成員的類一定是該成員所在類的子類;n3)當(dāng)該成員所在類的訪問控制方式為默認(rèn)模式類的訪問控制方式為默認(rèn)模式時(shí),則在其他軟件包中的任何成員方法都不能訪問該成員其他軟件包中的任何成員方法都不能訪問該成員。45封裝性(6)n類成員類成員的默認(rèn)訪問控制方式(的默認(rèn)訪問控制方式(當(dāng)類成員前不含任當(dāng)類成員前不含任何修飾詞時(shí)何修飾詞時(shí)) :n1)類所在軟件包類所在軟件包的所有類的定義體所有類的定義體均可訪問;n2)其他軟件包中的任何成員方法都不能訪問該成員其他軟件包中的任何成員方法都不能訪問該成員。n類成員類成員的的private訪問控制方式:訪問控制方式:n只有同一個(gè)類的成員方法才能訪問該成員只有同

48、一個(gè)類的成員方法才能訪問該成員;46封裝性(7)n如何確定成員應(yīng)具有的訪問控制方式?如何確定成員應(yīng)具有的訪問控制方式?n1)一般地,構(gòu)造方法的訪問控制方式為public;n2)一般地,成員域的訪問控制方式為private;n3)對于成員域,一般需要設(shè)置兩個(gè)成員方法:取值get和設(shè)置值set成員方法;n4)其他的根據(jù)實(shí)際需求來確定。public class J_Month private int m_month = 1; / 月份,要求取值從月份,要求取值從1到到12 public int mb_getMonth( ) return m_month; / 方法方法mb_getMonth結(jié)束結(jié)束

49、public int mb_setMonth(int m) if (m12) m_month= 12; else m_month= m; return m_month; / 方法方法mb_setMonth結(jié)束結(jié)束 / 類類J_Month結(jié)束結(jié)束47n面向?qū)ο蟾攀雒嫦驅(qū)ο蟾攀鰊類、域、方法和實(shí)例對象類、域、方法和實(shí)例對象n繼承性繼承性n多態(tài)性多態(tài)性n封裝性封裝性n關(guān)鍵字關(guān)鍵字abstract、static、final和和thisn接口接口n內(nèi)部類內(nèi)部類n變量作用域范圍和參數(shù)傳遞方式變量作用域范圍和參數(shù)傳遞方式n面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想主要內(nèi)容48n包包(package):

50、為了管理已開發(fā)的:為了管理已開發(fā)的Java代碼,可以用代碼,可以用包包將一組相關(guān)的類或接口封裝在一起。具體方法為:將一組相關(guān)的類或接口封裝在一起。具體方法為:在類、接口或枚舉類型等源程序的在類、接口或枚舉類型等源程序的第一句第一句進(jìn)行包聲進(jìn)行包聲明,格式如下:明,格式如下:包(1)package 包名包名;說明:包名可以為一個(gè)標(biāo)識符;也可以是多個(gè)標(biāo)識符通過符號說明:包名可以為一個(gè)標(biāo)識符;也可以是多個(gè)標(biāo)識符通過符號“.”連接在一起。包名的命名應(yīng)該概括相關(guān)類的功能。連接在一起。包名的命名應(yīng)該概括相關(guān)類的功能。package .tsinghua.universityOrganizatio

51、n;49n編譯含包聲明語句的編譯含包聲明語句的Java程序程序:編譯格式如下:編譯格式如下:包(2)javac d 路徑名路徑名 Java源程序名源程序名說明:說明:1)Java源程序文件的后綴必須是源程序文件的后綴必須是.java;2)路徑名指編譯后)路徑名指編譯后軟件包所在的根路徑軟件包所在的根路徑;如果;如果路徑名為路徑名為“.”,則編譯,則編譯后的后的軟件包在當(dāng)前目錄下軟件包在當(dāng)前目錄下。3)如果包名為多個(gè)標(biāo)識符通過符號)如果包名為多個(gè)標(biāo)識符通過符號“.”連接起來的,則編譯后會有多連接起來的,則編譯后會有多級目錄,各級目錄名依次為相應(yīng)的標(biāo)識符。級目錄,各級目錄名依次為相應(yīng)的標(biāo)識符。ja

52、vac d . J_Teacher.java50n引用包內(nèi)的類、接口或枚舉類型,引用包內(nèi)的類、接口或枚舉類型,需要使用需要使用import關(guān)鍵字導(dǎo)入包,具體關(guān)鍵字導(dǎo)入包,具體形式形式如下:如下:包(3)import 包名包名.*;import 包名包名.類型名類型名;import static 包名包名.類型名類型名.靜態(tài)成員方法靜態(tài)成員方法;將整個(gè)包的類,接口或枚舉導(dǎo)入當(dāng)前程序中將整個(gè)包的類,接口或枚舉導(dǎo)入當(dāng)前程序中將包的特定類導(dǎo)入當(dāng)前程序中將包的特定類導(dǎo)入當(dāng)前程序中將特定的靜態(tài)成員方法導(dǎo)入當(dāng)前程序中將特定的靜態(tài)成員方法導(dǎo)入當(dāng)前程序中51n任何包和包之間任何包和包之間都不存在嵌套包含關(guān)系都不

53、存在嵌套包含關(guān)系,例如:,例如:包(4)import .tsinghua.*;不能代替下列導(dǎo)入包語句:不能代替下列導(dǎo)入包語句:import .tsinghua.universityOrganization.*;注:注:Java虛擬機(jī)在查找需要導(dǎo)入的包是從虛擬機(jī)在查找需要導(dǎo)入的包是從classpath所指出的路徑找起的。所指出的路徑找起的。52n軟件包創(chuàng)建和應(yīng)用示例(軟件包創(chuàng)建和應(yīng)用示例(P78)。)。包(5)package .tsinghua.universityOrganization;public class J_Employee package cn.

54、edu.tsinghua.universityOrganization;import .tsinghua.universityOrganization.J_Employee;public class J_Teacher import .tsinghua.universityOrganization.J_Employee;import .tsinghua.universityOrganization.J_Teacher;public class J_University 注:編譯命令的順序如下:注:編譯命令的順序如下:1)javac d . J_Employe

55、e.java2)javac d . J_Teacher.java3)javac J_University.javaJ_Employee.javaJ_Teacher.javaJ_University.java53n軟件包創(chuàng)建和應(yīng)用示例(軟件包創(chuàng)建和應(yīng)用示例(P78) :n如果在J_University.java程序中沒有使用import語句導(dǎo)入J_Teacher類,則在該程序中實(shí)例化J_Teacher對象需要寫成如下形式:nJava中的系統(tǒng)包java.lang不需要顯式導(dǎo)入不需要顯式導(dǎo)入。包(6)J_Teacher a =new .tsinghua.universityOrganiz

56、ation.J_Teacher( );J_Teacher a =new J_Teacher( ); /沒有事先沒有事先import,這樣寫會編譯出錯(cuò)。,這樣寫會編譯出錯(cuò)。54n面向?qū)ο蟾攀雒嫦驅(qū)ο蟾攀鰊類、域、方法和實(shí)例對象類、域、方法和實(shí)例對象n繼承性繼承性n多態(tài)性多態(tài)性n包包(package)n封裝性封裝性n接口接口n內(nèi)部類內(nèi)部類n變量作用域范圍和參數(shù)傳遞方式變量作用域范圍和參數(shù)傳遞方式n面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想面向?qū)ο蟪绦蛟O(shè)計(jì)基本思想主要內(nèi)容55關(guān)鍵字abstract、static、final和this(1)nabstract: 用于修飾用于修飾類類、接口接口和和成員方法成員方法nsta

57、tic:用于修飾用于修飾內(nèi)部類內(nèi)部類、成員域成員域和和成員方法成員方法nfinal:用于修飾用于修飾非抽象類非抽象類、類的成員域類的成員域、類類的非抽象成員方法的非抽象成員方法以及以及接口的成員域接口的成員域。nthis: 用于用于引用實(shí)例對象本身引用實(shí)例對象本身。n上述上述4者只有者只有static和和final能組合使用,其他能組合使用,其他都是單獨(dú)出現(xiàn)的。都是單獨(dú)出現(xiàn)的。56關(guān)鍵字abstract、static、final和this(2)n關(guān)鍵字關(guān)鍵字abstract( 抽象性)抽象性)n1)用于修飾類修飾類:此時(shí)該類為抽象類抽象類,即該類不不能構(gòu)造生成實(shí)例對象能構(gòu)造生成實(shí)例對象;n2)

58、用于修飾成員方法修飾成員方法:此時(shí)該成員方法稱為抽抽象成員方法象成員方法;n3)接口接口總是總是具有抽象屬性具有抽象屬性,而不論其是否有abstract關(guān)鍵字修飾;n4)抽象成員方法一般出現(xiàn)在抽象類或接口當(dāng)中,不能不能在非抽象類中定義抽象成員方法在非抽象類中定義抽象成員方法;57關(guān)鍵字abstract、static、final和this(3)n定義定義抽象成員方法抽象成員方法:方法修飾詞列表方法修飾詞列表 返回類型返回類型 方法名方法名( 參數(shù)列表參數(shù)列表 );說明:說明:1)方法修飾詞中一定要有方法修飾詞中一定要有abstract,多個(gè)修飾詞用空格隔開多個(gè)修飾詞用空格隔開;2)參數(shù)列表可以有

59、多個(gè)參數(shù),)參數(shù)列表可以有多個(gè)參數(shù),參數(shù)之間用逗號隔開參數(shù)之間用逗號隔開;3)參數(shù)列表可以為空,)參數(shù)列表可以為空,但是不能寫成但是不能寫成void;4)抽象成員方法抽象成員方法沒有方法體沒有方法體,直接以分號,直接以分號“;”結(jié)尾。結(jié)尾。58關(guān)鍵字abstract、static、final和this(4)n抽象類和抽象成員方法的使用抽象類和抽象成員方法的使用n1)抽象類或接口是用于定義某些類的共同特征以以便于程序的擴(kuò)展,減少修改的代碼量便于程序的擴(kuò)展,減少修改的代碼量。n2)如果需要生成抽象類的實(shí)例對象,則可以編寫子類來繼承抽象類,此時(shí)子類此時(shí)子類一定要覆蓋一定要覆蓋(Override)抽象

60、類的抽象類的所有抽象方法所有抽象方法;n3)抽象類抽象類的成員方法可以不具有抽象性,即抽象抽象類可以只有非抽象成員方法類可以只有非抽象成員方法;n4)抽象類可以繼承抽象類,也可以繼承非抽象類抽象類可以繼承抽象類,也可以繼承非抽象類。59關(guān)鍵字abstract、static、final和this(5)n抽象類和抽象成員方法示例抽象類和抽象成員方法示例(J_Shape.java)abstract class J_Shape public abstract double mb_getArea( ); / 計(jì)算并返回形狀的面積計(jì)算并返回形狀的面積 / 抽象類抽象類J_Shape結(jié)束結(jié)束60n修飾詞修飾

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論