![Java程序設計(三)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/19/4ebdb036-999d-4b85-86ad-02d23586b7d5/4ebdb036-999d-4b85-86ad-02d23586b7d51.gif)
![Java程序設計(三)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/19/4ebdb036-999d-4b85-86ad-02d23586b7d5/4ebdb036-999d-4b85-86ad-02d23586b7d52.gif)
![Java程序設計(三)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/19/4ebdb036-999d-4b85-86ad-02d23586b7d5/4ebdb036-999d-4b85-86ad-02d23586b7d53.gif)
![Java程序設計(三)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/19/4ebdb036-999d-4b85-86ad-02d23586b7d5/4ebdb036-999d-4b85-86ad-02d23586b7d54.gif)
![Java程序設計(三)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/19/4ebdb036-999d-4b85-86ad-02d23586b7d5/4ebdb036-999d-4b85-86ad-02d23586b7d55.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、山東科技大學信息科學與工程學院2n類、域、方法和實例對象類、域、方法和實例對象n繼承性繼承性n多態(tài)性多態(tài)性n包包(package)n封裝性封裝性n關鍵字關鍵字abstract、static、final和和thisn接口接口n內部類內部類n變量作用域范圍和參數傳遞方式變量作用域范圍和參數傳遞方式n面向對象程序設計基本思想面向對象程序設計基本思想主要內容n為什么需要面向對象編程?為什么需要面向對象編程?32021-12-194面向對象程序設計整體介紹面向對象程序設計整體介紹n傳統(tǒng)的程序設計風格存在著傳統(tǒng)的程序設計風格存在著數據抽象簡單、信息完全暴露、數據抽象簡單、信息完全暴露、算法復雜、無法很好地
2、描述客觀世界等缺點算法復雜、無法很好地描述客觀世界等缺點,可重用性差,可重用性差,如果軟件項目龐大,程序的調試和維護將變得異常困難如果軟件項目龐大,程序的調試和維護將變得異常困難。n面向對象的基本思路:首先分析問題并建立相應的對象,面向對象的基本思路:首先分析問題并建立相應的對象,然后通過這些對象以及它們之間的配合解決問題,是模擬然后通過這些對象以及它們之間的配合解決問題,是模擬現實生活求解的一般過程?,F實生活求解的一般過程。5面向對象概述(2)n面向對象的基本思路面向對象的基本思路 對象對象表示現實世界中某個具體的事物事物。 事物事物可分為兩大部分 :物質物質 : 表達具體的事物表達具體的事
3、物意識意識 : 描述抽象的概念描述抽象的概念現實問題空間現實問題空間 面向對象解空間面向對象解空間 物質物質 對象對象(客觀存在的客觀存在的) 意識意識 類類 (抽象的概念抽象的概念)2021-12-196類的定義類的定義class People int mouth; int hand; int foot; void walk() void stand() void speak() 計算機中計算機中的對象的原型的對象的原型 現實生活現實生活中的對象中的對象2021-12-197class Car int engine; int wheel; void run() void stop() voi
4、d slowDown() void backward() 計算機中計算機中的對象的原型的對象的原型 現實生活現實生活中的對象中的對象類的定義類的定義8面向對象概述(3)n面向對象的程序設計面向對象的程序設計(OOP,Object Oriented Programming) 將將數據數據(屬性屬性)和和方法方法(行為或功能行為或功能)封裝封裝到類到類(classes)中:中:數據數據與與方法方法常常是緊密相關的。常常是緊密相關的。對象對象(objects): 類的實例對象或類本身類的實例對象或類本身三個基本特性:三個基本特性:封裝性封裝性、繼承性繼承性和和多態(tài)性多態(tài)性9面向對象概述(4)n結構化
5、程序設計n對應的典型的計算機語言對應的典型的計算機語言, 例如例如: Cn面向面向操作操作(action)的的n函數函數(方法方法)是程序的基本單位是程序的基本單位n面向對象程序設計n對應的典型的計算機語言對應的典型的計算機語言, 例如例如: Java、C+n面向面向對象對象(object)的的n類類(class)是程序的基本單位是程序的基本單位n方法方法(函數函數)被封裝在類中被封裝在類中n數據也常常被封裝在類中數據也常常被封裝在類中10n面向對象概述面向對象概述n繼承性繼承性n多態(tài)性多態(tài)性n包包(package)n封裝性封裝性n關鍵字關鍵字abstract、static、final和和th
6、isn接口接口n內部類內部類n變量作用域范圍和參數傳遞方式變量作用域范圍和參數傳遞方式n面向對象程序設計基本思想面向對象程序設計基本思想主要內容11類、域、方法和實例對象(1)n類(class)本身也是一種對象n類(class)同時也是實例對象的模板n類(class) 的基本組成:(成員)域和(成員)方法 n每個對象:擁有內存存儲成員域成員域/方法方法n靜態(tài)的成員靜態(tài)的成員域域/方法方法屬于類屬于類n其它成員其它成員域域/方法方法屬于實例對象屬于實例對象12類、域、方法和實例對象(2)n類定義的語法格式如下:類修飾詞列表類修飾詞列表 class 類名類名 extends 父類名父類名 impl
7、ements 接口名稱列表接口名稱列表 類體類體public class J_Teacher extends J_Employee public int m_classHour; / 授課的課時授課的課時 public J_Teacher( ) m_classHour = 96; / J_Teacher構造方法結束構造方法結束 public void mb_printInfo( ) System.out.println(該教師的工作年限為該教師的工作年限為 + m_workYear); System.out.println(該教師授課的課時為該教師授課的課時為 + m_classHour);
8、/ 方法方法mb_printInfo結束結束 / 類類J_Teacher結束結束P6713類、域、方法和實例對象(3)n類類定義的語法格式如下:類修飾詞列表類修飾詞列表 class 類名類名 extends 父類名父類名 implements 接口名稱列表接口名稱列表 類體類體說明:說明:1)方括號)方括號 表示可選項表示可選項;2)類修飾詞包括:)類修飾詞包括:public, protected, private, abstract, final, strictfp;3)如果類修飾詞列表包括如果類修飾詞列表包括public,則該類的命名須與所在的文件同名;,則該類的命名須與所在的文件同名;4
9、)如果類修飾詞列表不包括)如果類修飾詞列表不包括public,則該類只能在當前的軟件包使用則該類只能在當前的軟件包使用;5)同一個)同一個Java源文件可以包含多個類,源文件可以包含多個類,但是不能有兩個或兩個以上類但是不能有兩個或兩個以上類的修飾詞包括的修飾詞包括public;6)extends表示繼承某一父類;表示繼承某一父類;7)implements表示實現一個或多個接口;表示實現一個或多個接口;8)類體定義包括:)類體定義包括:構造方法構造方法,成員域成員域(Field),成員方法成員方法(method)。這三。這三者出現的順序沒有限制。者出現的順序沒有限制。14類、域、方法和實例對象
10、(4)n類的成員域類的成員域(Field)通常用來表示和存儲類所需要的數據,定義格式如下:成員域修飾詞列表成員域修飾詞列表 類型類型 變量名或帶初始化的變量名列表變量名或帶初始化的變量名列表說明:說明:1)域修飾詞為可選項包括:)域修飾詞為可選項包括:public, protected, private, static, final, transient, volatile;2)static表示當前成員域是靜態(tài)的;表示當前成員域是靜態(tài)的;3)final表示該成員在首次賦值之后不能再修改;表示該成員在首次賦值之后不能再修改;4)transient表示該成員域是暫時的,在對象保存時可以不進行保存;
11、表示該成員域是暫時的,在對象保存時可以不進行保存;5)volatile表示多線程程序中,訪問該成員域將采用同步機制。表示多線程程序中,訪問該成員域將采用同步機制。15類、域、方法和實例對象(5)n類的成員方法類的成員方法(Method)通常用來實現類所需要的各種功能,定義格式如下:方法修飾詞列表方法修飾詞列表 返回類型返回類型 方法名方法名(方法的參數列表方法的參數列表) 方法體方法體說明:說明:1)方法修飾詞包括:)方法修飾詞包括:public, protected, private, abstract, static, final, synchronized和和strictfp;2)abs
12、tract表示當前方法是抽象成員方法,表示當前方法是抽象成員方法,不能有方法體不能有方法體;3)static表示當前方法是靜態(tài)成員方法;表示當前方法是靜態(tài)成員方法;4)final表示表示當前方法所在類的子類不能出現同名方法當前方法所在類的子類不能出現同名方法;5)synchronized表示當前方法是同步成員方法;表示當前方法是同步成員方法;6)返回類型可以是)返回類型可以是void、基本數據類型基本數據類型和和引用數據類型引用數據類型;7)參數格式為:)參數格式為:多個參數用逗號隔開;多個參數用逗號隔開;8)在方法無參數時,也)在方法無參數時,也不能將方法的參數列表寫成不能將方法的參數列表寫
13、成void;public static void main( string args )類、域、方法和實例對象(4)volatile與與synchronized區(qū)別:區(qū)別:1)volatile本質是在告訴本質是在告訴jvm當前變量在寄存器中的值是不確當前變量在寄存器中的值是不確定的定的,需要從主存中讀取需要從主存中讀取,synchronized則是鎖定當前變量則是鎖定當前變量,只有只有當前線程可以訪問該變量當前線程可以訪問該變量,其他線程被阻塞住其他線程被阻塞住.2)volatile僅能使用在變量級別僅能使用在變量級別,synchronized則可以使用在變則可以使用在變量量,方法方法.3)v
14、olatile僅能實現變量的修改可見性僅能實現變量的修改可見性,但不具備原子特性但不具備原子特性,而而synchronized則可以保證變量的修改可見性和原子性則可以保證變量的修改可見性和原子性.4)volatile不會造成線程的阻塞不會造成線程的阻塞,而而synchronized可能會造成線可能會造成線程的阻塞程的阻塞.5)volatile標記的變量不會被編譯器優(yōu)化標記的變量不會被編譯器優(yōu)化,而而synchronized標記標記的變量可以被編譯器優(yōu)化的變量可以被編譯器優(yōu)化.17類、域、方法和實例對象(6)n類的構造方法類的構造方法用來實現類所需要的各種初始化功能,定義格式如下:構造方法修飾詞
15、列表構造方法修飾詞列表 方法名方法名(方法的參數列表方法的參數列表) 方法體方法體說明:說明:1)構造方法修飾詞包括:)構造方法修飾詞包括:public, protected, private;2)構造方法名必須與類名相同構造方法名必須與類名相同;3)構造方法沒有返回類型,也不能寫成構造方法沒有返回類型,也不能寫成void;4)每個類都至少有一個構造方法,如果沒有顯式定義,則系統(tǒng)為自動為)每個類都至少有一個構造方法,如果沒有顯式定義,則系統(tǒng)為自動為 該類定義一個不該類定義一個不含參數的默認構造方法;含參數的默認構造方法;如果有顯式定義,則系統(tǒng)不會創(chuàng)建默認的構造方法如果有顯式定義,則系統(tǒng)不會創(chuàng)建
16、默認的構造方法;創(chuàng)建類實例對象的格式如下:創(chuàng)建類實例對象的格式如下:new 構造方法名構造方法名(構造方法調用參數列表構造方法調用參數列表)18類、域、方法和實例對象(7)n類引用:類引用:使用使用引用數據類型引用數據類型來引用類來引用類(P62)。定。定義格式如下:義格式如下:類名類名 變量名或帶初始化的變量名列表變量名或帶初始化的變量名列表例如:例如:Integer a = new Integer(11);說明:說明:1)其中)其中a是引用數據類型變量;是引用數據類型變量;2)引用數據類型變量也包括)引用數據類型變量也包括4個屬性:個屬性:變量名、數據類型、存儲單元變量名、數據類型、存儲單
17、元和和值值;變量變量a.類類Integer的實例對象的實例對象變量變量a的存儲示意圖的存儲示意圖19類、域、方法和實例對象(8)n類實例對象的構造,類實例對象的構造,構造一個實例對象的過程如構造一個實例對象的過程如下:下:n1)首先內存中創(chuàng)建該實例對象;)首先內存中創(chuàng)建該實例對象;n2)然后初始化帶初始化值的成員域;)然后初始化帶初始化值的成員域;n3)調用構造方法完成實例對象的初始化工作。)調用構造方法完成實例對象的初始化工作。n4)構造完畢后,可以通過實例對象的引用來訪問該實)構造完畢后,可以通過實例對象的引用來訪問該實例對象的成員域和成員方法,具體格式如下:例對象的成員域和成員方法,具體
18、格式如下:引用變量名引用變量名.成員域名成員域名引用變量名引用變量名.成員方法名成員方法名例如:例如: Value( )注:構造時各種類型的默認值注:構造時各種類型的默認值: 基本數值類型基本數值類型: 0; boolean: false; 引用數據類型引用數據類型: null20類、域、方法和實例對象(9)n類實例對象的銷毀類實例對象的銷毀(P63):在:在java語言中,對類的語言中,對類的實例對象內存的回收是通過實例對象內存的回收是通過垃圾回收機制垃圾回收機制完成的。完成的。n1)不被Java程序使用的內存成為垃圾垃圾(garbage)。n2)對于一個實例對象,如果沒有引用指向
19、它,那么該實例對象所占據的內存就成為了垃圾。例如:n3)Java虛擬機會使用一定的算法來回收這些垃圾,但并不保證先申請的但并不保證先申請的存儲單元會被先釋放存儲單元會被先釋放。n4)通過直接調用Java API中類System的方法gc()方法可以申請盡快回收(Garbage Collecting)。n5)每個類都含有一個每個類都含有一個finalize()的成員方法的成員方法,在實例對象內存被回收之前,在實例對象內存被回收之前,會調用該方法。會調用該方法。該方法是類java.lang.object的成員方法。Integer a = new Integer(11);a = null; 此時創(chuàng)建
20、的此時創(chuàng)建的Integer實例實例對象成為垃圾。對象成為垃圾。21類、域、方法和實例對象(10)n類實例對象的生命周期:類實例對象的生命周期:從創(chuàng)建、使用、廢棄到從創(chuàng)建、使用、廢棄到回收的整個過程。以下是生命周期的例子:回收的整個過程。以下是生命周期的例子:J_Finalized.java其中:其中:J_Book(2)和和J_Book(3)的內存會被立即回收,的內存會被立即回收,而有引用而有引用book1的的J_Book(1) 則會在程序執(zhí)行完后被回收內存則會在程序執(zhí)行完后被回收內存。22n面向對象概述面向對象概述n類、域、方法和實例對象類、域、方法和實例對象n多態(tài)性多態(tài)性n包包(packag
21、e)n封裝性封裝性n關鍵字關鍵字abstract、static、final和和thisn接口接口n內部類內部類n變量作用域范圍和參數傳遞方式變量作用域范圍和參數傳遞方式n面向對象程序設計基本思想面向對象程序設計基本思想主要內容23繼承性(1)n面向對象的三大特性面向對象的三大特性:繼承性,:繼承性,多態(tài)性和封裝性多態(tài)性和封裝性。n問題:為什么要有繼承性?問題:為什么要有繼承性?-節(jié)省工作量,提高效率。節(jié)省工作量,提高效率。n繼承性:繼承性:軟件重用的一種方法,其定義格式如下:軟件重用的一種方法,其定義格式如下:n所有類都有一個默認的父類:所有類都有一個默認的父類:java.lang.objec
22、t。n繼承具有繼承具有傳遞性傳遞性:類:類A的父類為類的父類為類B,類,類B的父類為類的父類為類C ,則類則類C可稱為類可稱為類A的父類。的父類。類修飾詞列表類修飾詞列表 class 類名類名 extends 父類名父類名 implements 接口名稱列表接口名稱列表 類體類體24繼承性(2)n類繼承可通過關鍵詞類繼承可通過關鍵詞extends或或implements來實現。來實現。nextends只能指定一個父類(只能指定一個父類(java.lang.object除外),除外),該父類稱為直接父類。nimplements可實現多個接口。n子類和父類的構造方法之間存在如下子類和父類的構造方法
23、之間存在如下約束關系約束關系:n子類的構造方法必須調用父類的構造方法必須調用父類的構造方法,并且該語句必須是子類構造方法的第一條語句。調用格式如下:super(參數列表參數列表)其中:其中:1)super為關鍵字,為關鍵字,參數列表須與父類的某個構造方法相匹配參數列表須與父類的某個構造方法相匹配。2)如果在子類構造方法里沒有書寫調用父類構造方法的)如果在子類構造方法里沒有書寫調用父類構造方法的super語句,則語句,則java虛擬機會虛擬機會自動隱式地自動隱式地在子類構造方法的在子類構造方法的最前面插入最前面插入super()語句語句;此時如果;此時如果父類沒有不含任何參數的構造方法,則編譯將
24、出錯。父類沒有不含任何參數的構造方法,則編譯將出錯。25繼承性(3)n類繼承的示例類繼承的示例(J_Teacher.java):職工和教師之間的繼承。:職工和教師之間的繼承。class J_Employee public int m_workYear; / 工作的年限工作的年限 public J_Employee( ) m_workYear = 1; / J_Employee構造方法結束構造方法結束 / 類類J_Employee結束結束繼承于繼承于public class J_Teacher extends J_Employee public int m_classHour; / 授課的課時授
25、課的課時 public J_Teacher( ) m_classHour = 96; / J_Teacher構造方法結束構造方法結束 public void mb_printInfo( ) System.out.println(該教師的工作年限為該教師的工作年限為 + m_workYear); System.out.println(該教師授課的課時為該教師授課的課時為 + m_classHour); / 方法方法mb_printInfo結束結束 public static void main(String args ) J_Teacher tom = new J_Teacher( ); tom
26、.mb_printInfo( ); / 方法方法main結束結束 / 類類J_Teacher結束結束26繼承性(4)n子類和父類之間的轉換規(guī)則:子類和父類之間的轉換規(guī)則:n1)隱式轉換隱式轉換:子類型的數據子類型的數據轉換為父類型的數據父類型的數據,此時可以不需不需要要強制轉換符號“( )”, 例如: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強制轉換成強制轉換成J_Employee對象,會導致編譯錯誤。對象,會導致編譯錯誤。27繼承性(5)n子類和父類之間的轉換規(guī)則:子類和父類之間的轉換規(guī)則:n2)顯式轉換顯式轉換:父類型的數據父類型的數據轉換為子類型的數據子類型的數據,此時需要需要強制轉換符號“( )”, 例如: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;此時無法從此時無法從a引用
28、的實例對象得到引用的實例對象得到J_Teacher的實例對象。的實例對象。28繼承性(6)n子類和父類之間的轉換規(guī)則:子類和父類之間的轉換規(guī)則:n3)如果兩個類型之間不存在子類型和父類型之間的關系,則一般如果兩個類型之間不存在子類型和父類型之間的關系,則一般不能進行轉換。不能進行轉換。J_Teacher tom=new J_Teacher( );System.out.println(String)tom);此時類此時類J_Teacher和類和類String之間不存在子類和父類的關系。之間不存在子類和父類的關系。29繼承性(7)n子類實例對象和父類實例對象之間的關系:子類實例對象和父類實例對象之
29、間的關系:n子類的實例對象子類的實例對象是是父類的實例對象;父類的實例對象;n父類的實例對象父類的實例對象一般不是一般不是子類的實例對象;子類的實例對象;n判斷一個引用表達式所指向的實例對象是否是某種引用類型的實判斷一個引用表達式所指向的實例對象是否是某種引用類型的實例對象可通過例對象可通過instanceof運算符運算符來實現,具體格式如下來實現,具體格式如下:引用類型表達式引用類型表達式 instanceof 引用類型引用類型說明:說明: 當當引用類型表達式不是引用類型表達式不是null且所指對象為指定的引用類型且所指對象為指定的引用類型時返回時返回true;否則返回;否則返回false。
30、30繼承性(8)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子類實例對象和父類實例對象之間的關系:子類實例對象和父類實例對象之間的關系:n使用使用instanceof以避免運行時的類型轉換錯誤:以避免運行時的類型轉換錯誤:J_Teacher b=(J_Teacher)a;if (a instanceof J_Teacher) b=(J_Teacher)a;else b=new J_Teacher();此時可能存在運行時錯誤,此時可能存在運行時錯誤,因為因為a可能不能被強制轉換可能不能被強制轉換為為J_Teacher。例如:。例如:建議寫成上述形式。建議寫成上述形式。J_Employee a=new J_Employee(
32、);32n面向對象概述面向對象概述n類、域、方法和實例對象類、域、方法和實例對象n繼承性繼承性n包包(package)n封裝性封裝性n關鍵字關鍵字abstract、static、final和和thisn接口接口n內部類內部類n變量作用域范圍和參數傳遞方式變量作用域范圍和參數傳遞方式n面向對象程序設計基本思想面向對象程序設計基本思想主要內容33多態(tài)性(1)n面向對象的三大特性:繼承性,面向對象的三大特性:繼承性,多態(tài)性多態(tài)性和封裝性。和封裝性。n問題:為什么要有問題:為什么要有多態(tài)性多態(tài)性?-龍生九種龍生九種,同一類,同一類事物可能有多種表現形式。事物可能有多種表現形式。n多態(tài)性:也是軟件重用的
33、一種技術,具體實現方多態(tài)性:也是軟件重用的一種技術,具體實現方法如下:法如下:n多個構造方法;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)性:指同一個類中同名方法在功能上的重載指同一個類中同名方法在功能上的重載(Overload) 。具體說明如下:。具體說明如下:n1)方法可以是構造方法構造方法和成員方法成員方法;n2)重載方法包括子類對其父類同名方法的功能重載子類對其父類同名方法的功能重載;n3)重載方法的參數列表必須
34、不相同,包括參數個數參數個數、參參數類型數類型或參數的數據類型排序參數的數據類型排序不同;如果僅是方法參數如果僅是方法參數變量名不同,則不能稱之為重載,且編譯會報錯變量名不同,則不能稱之為重載,且編譯會報錯。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; / 學號學號 public int m_age; / 年齡年齡 public J_Student( ) mb_setData(2008010400, 19); / J_Student構造
35、方法結束構造方法結束 public J_Student( int id, int age ) mb_setData(id, age); / J_Student構造方法結束構造方法結束 public void mb_setData( int id, int age ) m_id = id; m_age = age; / 方法方法mb_setData結束結束 public void mb_setData( int id ) m_id = id; / 方法方法mb_setData結束結束 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的學號是的學號是 + jack.m_id); System.out.println(,年齡是,年齡是 + jack.m_age); System.out.print(Lisa的學號是的學號是 + lisa.m_id); System.out.println(,年齡是,年齡是 + lisa.m_age); / 方法方法main結束
37、結束 / 類類J_Student結束結束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)子類方法和父類方法的返回類型、參數個數、參數類型和參數數據類型的排序均須相同;n3)子類方法的訪問控制方式一般一
38、般比父類要廣,成員的訪問控制方式包括4種:public, protected, 默認模式和private。n4)利用動態(tài)多態(tài)性可以通過父類型的引用父類型的引用來調用來調用子類型的覆蓋成員子類型的覆蓋成員方法方法。n5)動態(tài)多態(tài)性一般需要在運行時由Java虛擬機來識別到底是調用子調用子類的覆蓋成員方法類的覆蓋成員方法還是調用父類的成員方法調用父類的成員方法,這種特征稱為動態(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構造方法結束構造方法結束 public void mb_printInfo( ) System.out.println(該教師的工作年限為該教師的工作年限為 + m_workYear); / 方法方法mb_printInfo結束結束 / 類類J_Employee結束結束public class J_Teacher1 extends J_Employee public int m_classHour; / 授課的課時授課的課時 public J_Teacher1( ) m_classHour = 96; / J_Teach
40、er構造方法結束構造方法結束 public void mb_printInfo( ) System.out.println(該教師的工作年限為該教師的工作年限為 + m_workYear); System.out.println(該教師授課的課時為該教師授課的課時為 + m_classHour); / 方法方法mb_printInfo結束結束 public static void main(String args ) J_Employee a=new J_Employee(); a.mb_printInfo(); a=new J_Teacher1(); a.mb_printInfo(); /
41、方法方法main結束結束 / 類類J_Teacher結束結束38n動態(tài)多態(tài)性中動態(tài)多態(tài)性中在子類成員方法中訪問父類中的成員方法在子類成員方法中訪問父類中的成員方法(P75):通過使用:通過使用super關鍵字來實現,調用格式如下:關鍵字來實現,調用格式如下:n同理,也可以同理,也可以super關鍵字關鍵字在子類的非靜態(tài)成員方法中在子類的非靜態(tài)成員方法中訪問訪問父類的父類的成員域成員域,調用格式如下:,調用格式如下:n與與super相對應的相對應的this關鍵字關鍵字,this可用于在可用于在當前類的非靜態(tài)當前類的非靜態(tài)成員方法成員方法中調用中調用本類本類的的成員域成員域或或成員方法成員方法。多
42、態(tài)性(6)super.父類的成員方法父類的成員方法(參數列表參數列表)super.父類的成員域父類的成員域說明:此時父類的成員域說明:此時父類的成員域既可以靜態(tài)的,也可以是既可以靜態(tài)的,也可以是非靜態(tài)非靜態(tài)的的。39n面向對象概述面向對象概述n類、域、方法和實例對象類、域、方法和實例對象n繼承性繼承性n多態(tài)性多態(tài)性n包包(package)n關鍵字關鍵字abstract、static、final和和thisn接口接口n內部類內部類n變量作用域范圍和參數傳遞方式變量作用域范圍和參數傳遞方式n面向對象程序設計基本思想面向對象程序設計基本思想主要內容40封裝性(1)n面向對象的三大特性:繼承性,多態(tài)性
43、和面向對象的三大特性:繼承性,多態(tài)性和封裝性封裝性。n問題:為什么要有封裝性?問題:為什么要有封裝性?訪問控制訪問控制,透明操作透明操作n封裝性封裝性:通過封裝性:通過封裝性可屏蔽各個模塊可屏蔽各個模塊(對象對象)的內的內部具體實現方式部具體實現方式,對外僅表現為,對外僅表現為成員的調用成員的調用。n對于對于類(非內部類)類(非內部類)的訪問控制方式有兩種的訪問控制方式有兩種:公公共模式共模式(public)和和默認模式默認模式(default)。n對于對于類成員類成員的訪問控制方式有四種的訪問控制方式有四種:公共模式公共模式(public),保護模式保護模式(protected),默認模式默
44、認模式(default)和和私有模式私有模式(private)。41封裝性(2)n類(非內部類)類(非內部類)的訪問控制方式有兩種的訪問控制方式有兩種:公共模公共模式式(public)和和默認模式默認模式(default)。n公共模式公共模式:類修飾詞有public則該類訪問控制方式為“公共模式”,即該類可被所有軟件包使用該類可被所有軟件包使用。例如:n默認模式默認模式:類修飾詞沒有public, protected和private,則該類訪問控制方式為“默認模式”,即該類只能在同該類只能在同一個軟件包內部使用一個軟件包內部使用。public class J_Teacher extends J
45、_Employee42封裝性(3)n類成員類成員的訪問控制方式有四種的訪問控制方式有四種:公共模式公共模式(public), 保保護模式護模式(protected),默認模式默認模式(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構造方法結束構造方法結束 public void mb_printInfo( ) System.out.println(該職工的工作年限該職工的工作年限為為 + m_workYear); / 方法方法mb_printInfo結束結束 / 類類J_Employee結束結束44封裝性(5)n類成員類成員的的protected訪問控制方式(訪問控制方式(P82)n1)類所在軟件包類所在軟件包的所有類的定義體所有類的定義體均可訪問;n2)當該成員所在類的訪問控制方式為公共模式類的訪問控制方式為公共模式時,則其他軟件包中
47、能訪問該成員的類一定是該成員所在類的子類;n3)當該成員所在類的訪問控制方式為默認模式類的訪問控制方式為默認模式時,則在其他軟件包中的任何成員方法都不能訪問該成員其他軟件包中的任何成員方法都不能訪問該成員。45封裝性(6)n類成員類成員的默認訪問控制方式(的默認訪問控制方式(當類成員前不含任當類成員前不含任何修飾詞時何修飾詞時) :n1)類所在軟件包類所在軟件包的所有類的定義體所有類的定義體均可訪問;n2)其他軟件包中的任何成員方法都不能訪問該成員其他軟件包中的任何成員方法都不能訪問該成員。n類成員類成員的的private訪問控制方式:訪問控制方式:n只有同一個類的成員方法才能訪問該成員只有同
48、一個類的成員方法才能訪問該成員;46封裝性(7)n如何確定成員應具有的訪問控制方式?如何確定成員應具有的訪問控制方式?n1)一般地,構造方法的訪問控制方式為public;n2)一般地,成員域的訪問控制方式為private;n3)對于成員域,一般需要設置兩個成員方法:取值get和設置值set成員方法;n4)其他的根據實際需求來確定。public class J_Month private int m_month = 1; / 月份,要求取值從月份,要求取值從1到到12 public int mb_getMonth( ) return m_month; / 方法方法mb_getMonth結束結束
49、public int mb_setMonth(int m) if (m12) m_month= 12; else m_month= m; return m_month; / 方法方法mb_setMonth結束結束 / 類類J_Month結束結束47n面向對象概述面向對象概述n類、域、方法和實例對象類、域、方法和實例對象n繼承性繼承性n多態(tài)性多態(tài)性n封裝性封裝性n關鍵字關鍵字abstract、static、final和和thisn接口接口n內部類內部類n變量作用域范圍和參數傳遞方式變量作用域范圍和參數傳遞方式n面向對象程序設計基本思想面向對象程序設計基本思想主要內容48n包包(package):
50、為了管理已開發(fā)的:為了管理已開發(fā)的Java代碼,可以用代碼,可以用包包將一組相關的類或接口封裝在一起。具體方法為:將一組相關的類或接口封裝在一起。具體方法為:在類、接口或枚舉類型等源程序的在類、接口或枚舉類型等源程序的第一句第一句進行包聲進行包聲明,格式如下:明,格式如下:包(1)package 包名包名;說明:包名可以為一個標識符;也可以是多個標識符通過符號說明:包名可以為一個標識符;也可以是多個標識符通過符號“.”連接在一起。包名的命名應該概括相關類的功能。連接在一起。包名的命名應該概括相關類的功能。package .tsinghua.universityOrganizatio
51、n;49n編譯含包聲明語句的編譯含包聲明語句的Java程序程序:編譯格式如下:編譯格式如下:包(2)javac d 路徑名路徑名 Java源程序名源程序名說明:說明:1)Java源程序文件的后綴必須是源程序文件的后綴必須是.java;2)路徑名指編譯后)路徑名指編譯后軟件包所在的根路徑軟件包所在的根路徑;如果;如果路徑名為路徑名為“.”,則編譯,則編譯后的后的軟件包在當前目錄下軟件包在當前目錄下。3)如果包名為多個標識符通過符號)如果包名為多個標識符通過符號“.”連接起來的,則編譯后會有多連接起來的,則編譯后會有多級目錄,各級目錄名依次為相應的標識符。級目錄,各級目錄名依次為相應的標識符。ja
52、vac d . J_Teacher.java50n引用包內的類、接口或枚舉類型,引用包內的類、接口或枚舉類型,需要使用需要使用import關鍵字導入包,具體關鍵字導入包,具體形式形式如下:如下:包(3)import 包名包名.*;import 包名包名.類型名類型名;import static 包名包名.類型名類型名.靜態(tài)成員方法靜態(tài)成員方法;將整個包的類,接口或枚舉導入當前程序中將整個包的類,接口或枚舉導入當前程序中將包的特定類導入當前程序中將包的特定類導入當前程序中將特定的靜態(tài)成員方法導入當前程序中將特定的靜態(tài)成員方法導入當前程序中51n任何包和包之間任何包和包之間都不存在嵌套包含關系都不
53、存在嵌套包含關系,例如:,例如:包(4)import .tsinghua.*;不能代替下列導入包語句:不能代替下列導入包語句:import .tsinghua.universityOrganization.*;注:注:Java虛擬機在查找需要導入的包是從虛擬機在查找需要導入的包是從classpath所指出的路徑找起的。所指出的路徑找起的。52n軟件包創(chuàng)建和應用示例(軟件包創(chuà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)建和應用示例(軟件包創(chuàng)建和應用示例(P78) :n如果在J_University.java程序中沒有使用import語句導入J_Teacher類,則在該程序中實例化J_Teacher對象需要寫成如下形式:nJava中的系統(tǒng)包java.lang不需要顯式導入不需要顯式導入。包(6)J_Teacher a =new .tsinghua.universityOrganiz
56、ation.J_Teacher( );J_Teacher a =new J_Teacher( ); /沒有事先沒有事先import,這樣寫會編譯出錯。,這樣寫會編譯出錯。54n面向對象概述面向對象概述n類、域、方法和實例對象類、域、方法和實例對象n繼承性繼承性n多態(tài)性多態(tài)性n包包(package)n封裝性封裝性n接口接口n內部類內部類n變量作用域范圍和參數傳遞方式變量作用域范圍和參數傳遞方式n面向對象程序設計基本思想面向對象程序設計基本思想主要內容55關鍵字abstract、static、final和this(1)nabstract: 用于修飾用于修飾類類、接口接口和和成員方法成員方法nsta
57、tic:用于修飾用于修飾內部類內部類、成員域成員域和和成員方法成員方法nfinal:用于修飾用于修飾非抽象類非抽象類、類的成員域類的成員域、類類的非抽象成員方法的非抽象成員方法以及以及接口的成員域接口的成員域。nthis: 用于用于引用實例對象本身引用實例對象本身。n上述上述4者只有者只有static和和final能組合使用,其他能組合使用,其他都是單獨出現的。都是單獨出現的。56關鍵字abstract、static、final和this(2)n關鍵字關鍵字abstract( 抽象性)抽象性)n1)用于修飾類修飾類:此時該類為抽象類抽象類,即該類不不能構造生成實例對象能構造生成實例對象;n2)
58、用于修飾成員方法修飾成員方法:此時該成員方法稱為抽抽象成員方法象成員方法;n3)接口接口總是總是具有抽象屬性具有抽象屬性,而不論其是否有abstract關鍵字修飾;n4)抽象成員方法一般出現在抽象類或接口當中,不能不能在非抽象類中定義抽象成員方法在非抽象類中定義抽象成員方法;57關鍵字abstract、static、final和this(3)n定義定義抽象成員方法抽象成員方法:方法修飾詞列表方法修飾詞列表 返回類型返回類型 方法名方法名( 參數列表參數列表 );說明:說明:1)方法修飾詞中一定要有方法修飾詞中一定要有abstract,多個修飾詞用空格隔開多個修飾詞用空格隔開;2)參數列表可以有
59、多個參數,)參數列表可以有多個參數,參數之間用逗號隔開參數之間用逗號隔開;3)參數列表可以為空,)參數列表可以為空,但是不能寫成但是不能寫成void;4)抽象成員方法抽象成員方法沒有方法體沒有方法體,直接以分號,直接以分號“;”結尾。結尾。58關鍵字abstract、static、final和this(4)n抽象類和抽象成員方法的使用抽象類和抽象成員方法的使用n1)抽象類或接口是用于定義某些類的共同特征以以便于程序的擴展,減少修改的代碼量便于程序的擴展,減少修改的代碼量。n2)如果需要生成抽象類的實例對象,則可以編寫子類來繼承抽象類,此時子類此時子類一定要覆蓋一定要覆蓋(Override)抽象
60、類的抽象類的所有抽象方法所有抽象方法;n3)抽象類抽象類的成員方法可以不具有抽象性,即抽象抽象類可以只有非抽象成員方法類可以只有非抽象成員方法;n4)抽象類可以繼承抽象類,也可以繼承非抽象類抽象類可以繼承抽象類,也可以繼承非抽象類。59關鍵字abstract、static、final和this(5)n抽象類和抽象成員方法示例抽象類和抽象成員方法示例(J_Shape.java)abstract class J_Shape public abstract double mb_getArea( ); / 計算并返回形狀的面積計算并返回形狀的面積 / 抽象類抽象類J_Shape結束結束60n修飾詞修飾
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度環(huán)保設備研發(fā)項目委托合同
- 遼寧2025年遼寧中醫(yī)藥大學附屬醫(yī)院招聘42人筆試歷年參考題庫附帶答案詳解
- 蘇州江蘇蘇州大學科研助理崗位招聘9人筆試歷年參考題庫附帶答案詳解
- 百色2025年廣西百色學院招聘195人筆試歷年參考題庫附帶答案詳解
- 溫州浙江溫州市司法局招聘行政復議輔助人員筆試歷年參考題庫附帶答案詳解
- 杭州浙江杭州市余杭區(qū)良渚杭行幼兒園招聘合同制教師19人筆試歷年參考題庫附帶答案詳解
- 2025年中國多功能數字功放式調音臺市場調查研究報告
- 2025至2031年中國頂置式沙缸行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國編織纏繞耐熱膠管行業(yè)投資前景及策略咨詢研究報告
- 2025年生命體癥檢測儀項目可行性研究報告
- 兒科重癥監(jiān)護病房管理演示文稿
- 九年級班主任開學第一課設計課件
- 建設工程項目管理課程-課件
- 甲基異丁基甲酮化學品安全技術說明書
- SURPAC軟件地質建模操作步驟
- (中職)化學分析技術項目一 走進化學分析實驗室教學課件
- 秘書實務完整版課件全套ppt教程
- 新版神經系統(tǒng)疾病的病史采集和體格檢查ppt
- 義務教育《歷史》課程標準(2022年版)
- 螺栓扭緊力矩表
- 國家標準硬度轉換表
評論
0/150
提交評論