




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第四章第四章 Java面向對象特性面向對象特性 ?對象與類對象與類 ?對象生命周期對象生命周期 ?類的創(chuàng)建類的創(chuàng)建 ?重載重載 ?子類子類 1 對象的基本概念對象的基本概念 面向對象程序語言三個關鍵特點:面向對象程序語言三個關鍵特點: ?封裝封裝 ( Encapsulation ) ?多態(tài)多態(tài) ( Polymorphism ) ?繼承繼承 ( Inheritance ) 2 抽象數(shù)據(jù)類型抽象數(shù)據(jù)類型 ?基本數(shù)據(jù)類型和聚集類型的變量與一些操作基本數(shù)據(jù)類型和聚集類型的變量與一些操作 (如(如+, -)之間不需特殊的聯(lián)系。)之間不需特殊的聯(lián)系。 ?在面向對象語言中,在數(shù)據(jù)類型的聲明與操作在面向對象語
2、言中,在數(shù)據(jù)類型的聲明與操作 這些數(shù)據(jù)的代碼聲明之間建立緊密聯(lián)系,這種這些數(shù)據(jù)的代碼聲明之間建立緊密聯(lián)系,這種 聯(lián)系通常描述為一種抽象數(shù)據(jù)類型。聯(lián)系通常描述為一種抽象數(shù)據(jù)類型。 ? 在在Java中,抽象數(shù)據(jù)類型的概念用類來實現(xiàn)。中,抽象數(shù)據(jù)類型的概念用類來實現(xiàn)。 3 類和對象類和對象 ?類是特定類型對象的定義,包括:對象包含的類是特定類型對象的定義,包括:對象包含的 數(shù)據(jù),對象的創(chuàng)建及對象對自身數(shù)據(jù)操作的方法。數(shù)據(jù),對象的創(chuàng)建及對象對自身數(shù)據(jù)操作的方法。 ?類是一個模板。類是一個模板。 ?對象是在其類模型基礎上構造出的,是具體的對象是在其類模型基礎上構造出的,是具體的 實例。實例。 4 類和對
3、象舉例類和對象舉例 類定義:類定義:Class EmpInfo String name; String designation; String department; void print( ) System.out.println(name+“is”+ designation+“at”+department); 對象的生成與使用:對象的生成與使用: EmpInfo employee = new EmpInfo( ); = “ Robert Javaman”; employee.designation = “Manager”; employee.department
4、 = “Coffee shop”; employee.print( ); . 5 對象生命周期對象生命周期 創(chuàng)建對象 創(chuàng)建對象 使用對象使用對象 清除不用的對象清除不用的對象 6 ? ? ? 創(chuàng)建對象創(chuàng)建對象 創(chuàng)建對象的三個步驟:創(chuàng)建對象的三個步驟: ? ? 聲明聲明 (Declaration ) ? ? 實例化(實例化(Instantiation) ? ? 初始化(初始化(Initialization) 例:例: Point origin_one ; origin_one = new Point(23, 94); Rectangle rect_one = new Rectangle(orig
5、in_one, 100, 200); Rectangle rect_two = new Rectangle(50, 100); 7 對象實例化過程對象實例化過程 構造與初始化對象的過程(調用構造與初始化對象的過程(調用new Xxxx(): ? ?開辟內存空間(變量、方法體代碼)及類成員開辟內存空間(變量、方法體代碼)及類成員 變量變量 的初始化的初始化: 數(shù)值型:數(shù)值型:0; 布爾型:布爾型:false; 引用型:引用型:null; 字符串型:字符串型:null; ? ? 顯式初始化:執(zhí)行類成員聲明時帶有的簡單顯式初始化:執(zhí)行類成員聲明時帶有的簡單 賦值賦值 表達式。表達式。 public
6、class Initialized private int x = 5 ; private String name = “Fred”; ? ?執(zhí)行構造函數(shù)。執(zhí)行構造函數(shù)。 8 對象的回收對象的回收 ?垃圾收集機制(垃圾收集機制(garbage collection):):Java運行環(huán)境當確定運行環(huán)境當確定 某個對象不再被使用時,將其刪除。某個對象不再被使用時,將其刪除。 ?一個對象在沒有引用指向它時,可作為垃圾收集。一個對象在沒有引用指向它時,可作為垃圾收集。 ?垃圾搜集器:垃圾搜集器:Java運行環(huán)境中的垃圾搜集器周期性地釋放運行環(huán)境中的垃圾搜集器周期性地釋放 不用對象占用的空間。不用對象
7、占用的空間。 9 垃圾收集機制垃圾收集機制 C+: :A *a=new A( ); A *b=a; A *c=a; /a 使用完,將其刪除使用完,將其刪除 delete a; Java :A a=new A( ); A b=a; A c=a; /a 使用完,將其刪除使用完,將其刪除 a= null ; a b c b c (指針懸空) b c 10 a b c 類的創(chuàng)建類的創(chuàng)建 ? 11 類的構造函數(shù)類的構造函數(shù) ?構造方法定義:構造方法定義: public 類名(參數(shù))類名(參數(shù)) 注意:注意: ?方法名必須與類名相同。 方法名必須與類名相同。 ?不能帶返回類型。 不能帶返回類型。 12 缺
8、省構造函數(shù)缺省構造函數(shù) ?如果在類定義中無構造函數(shù),如果在類定義中無構造函數(shù), Java 在編譯時在編譯時 可缺省加入構造方法。如可缺省加入構造方法。如 public Employee( ) ; ?一旦在類中有一個自己聲明的構造函數(shù),則缺省一旦在類中有一個自己聲明的構造函數(shù),則缺省 的構造函數(shù)將不被加到源程序中。的構造函數(shù)將不被加到源程序中。 13 類成員方法定義類成員方法定義 ?一般格式:一般格式: ()throws ?方法是傳值的,方法調用不會改變參數(shù)的值。方法是傳值的,方法調用不會改變參數(shù)的值。 ?當對象作為參數(shù)時,參數(shù)的值是該對象的引用,當對象作為參數(shù)時,參數(shù)的值是該對象的引用, 這時
9、對象的內容可以在方法中改變,但是對象的這時對象的內容可以在方法中改變,但是對象的 引用不會改變。引用不會改變。 14 舉例舉例 Public class PassTest float ptValue; public void changeInt(int value) value = 55 ; public void changeStr(String value) value = new String(different“); public void changeObjValue( PassTest ref) ref.ptValue = 99.0f; public static void mai
10、n(String args ) String str; int val; PassTest pt= new PassTest( ); 結果:結果: val = 11; Int Value is : 11 pt.changeInt(val); Str Value is : hello System.out.println(“Int value is:” +val); str = new String(“hello”); pt value is : 99.0f pt.changeStr(str); System.out.println(“str value is:” +str); pt.ptval
11、ue = 101.0f ; pt.changeObjValue(pt); System.out.println(“pt value is:” +pt.ptValue); 15 數(shù)據(jù)隱藏與封裝數(shù)據(jù)隱藏與封裝 ?數(shù)據(jù)隱藏:使用數(shù)據(jù)隱藏:使用private定義的成員變量,只能定義的成員變量,只能 在成員方法中使用,其它方法中禁止使用。在成員方法中使用,其它方法中禁止使用。 優(yōu)點:優(yōu)點: 保證對象中數(shù)據(jù)的一致性。保證對象中數(shù)據(jù)的一致性。 ?封裝:基本數(shù)據(jù)和對數(shù)據(jù)進行的操作方法的結合。封裝:基本數(shù)據(jù)和對數(shù)據(jù)進行的操作方法的結合。 優(yōu)點:優(yōu)點: ?隱藏類中具體實現(xiàn)的細節(jié)。 隱藏類中具體實現(xiàn)的細節(jié)。 ?強迫
12、程序員使用統(tǒng)一的接口訪問數(shù)據(jù)。 強迫程序員使用統(tǒng)一的接口訪問數(shù)據(jù)。 ?使代碼可維護性好。 使代碼可維護性好。 16 數(shù)據(jù)隱藏與封裝舉例數(shù)據(jù)隱藏與封裝舉例 Class Date private int day, month, year; void setDate( int a, int b, int c) day = a; month = b; year = c ; Date d1; d1.new Date( ); d1.day = 30;( 錯誤?。╁e誤!) d1.setDate(30,9,2001); . 17 “this “ 引用引用 關鍵字關鍵字this 用來指向當前對象本身。用來指向當
13、前對象本身。 例:例:class Date private int day, month,year; public Date getTommorrow( ) this.day+; 18 重載(重載(Overloading) ?含義:在同一個類中一個方法名被用來定義多個含義:在同一個類中一個方法名被用來定義多個 方法。方法。 classScreen public void print( int i) public void print( float i) public void print( String str ) ?重載必須遵守原則:重載必須遵守原則: ? 參數(shù)表必須不同,以此區(qū)分不同方法體
14、。 參數(shù)表必須不同,以此區(qū)分不同方法體。 ?返回類型、修飾符可相同或不相同。 返回類型、修飾符可相同或不相同。 19 激活重載的構造函數(shù)激活重載的構造函數(shù) 在一個構造函數(shù)中可以利用另一個構造函數(shù)。在一個構造函數(shù)中可以利用另一個構造函數(shù)。 class Employee private String name; private int salary; public Employee(String n, int s) name = n ; salary = s; public Employee( String n) this(n,0); public Employee( ) this(“Unknow
15、n” ”); 20 子類子類 ?子類表示類之間一種子類表示類之間一種“屬于屬于” 例:例:public class Employee String name ; Date hireDate ; Date dateofBirth ; String jobTitle ; int grade ; ( is a ) 關系。關系。 public class Manager String name ; Date hireDate ; Date dateofBirth ; String jobTitle ; int grade ; String department ; Employee subordina
16、tes; 21 Extends 關鍵字關鍵字 ? Java中用中用 extends 關鍵字定義子類。關鍵字定義子類。 public class Employee String name ; Date hireDate ; Date dateofBirth ; String jobTitle ; int grade ; public class Manager extends Employee String department ; Employee subordinates; ?子類是從已有的類創(chuàng)建新類的一種方法。子類是從已有的類創(chuàng)建新類的一種方法。 22 子類子類 ?子類繼承父類的屬性、功能
17、(方法),子類中只子類繼承父類的屬性、功能(方法),子類中只 需聲明特有的東西。需聲明特有的東西。 ?帶帶private 修飾符的屬性、方法是不能被繼承的。修飾符的屬性、方法是不能被繼承的。 ?構造函數(shù)不能被繼承。構造函數(shù)不能被繼承。 ?在方法中調用構造方法用在方法中調用構造方法用 this() 。 ?調用父類的構造方法用調用父類的構造方法用 super() 。 - super 指向該關鍵字所在類的父類。指向該關鍵字所在類的父類。 23 構造不同類型數(shù)據(jù)的集合構造不同類型數(shù)據(jù)的集合 ? Java中允許構造如下類型的數(shù)組:中允許構造如下類型的數(shù)組: Employee staff = new Em
18、ployee1024; staff0 = new Manager( ); staff1 = new Worker(); staff2 = new Employee(); - staff 是由多種類型的對象組成的。是由多種類型的對象組成的。 ? Java中任何一個子類的實例都可作為父類的實例中任何一個子類的實例都可作為父類的實例 使用,可以調用父類具有的方法。使用,可以調用父類具有的方法。 24 單繼承單繼承 Java 是單繼承的,即只能從一個類繼承,是單繼承的,即只能從一個類繼承, 后類名只能有一個。后類名只能有一個。 單繼承的優(yōu)點:單繼承的優(yōu)點: ?代碼更可靠 代碼更可靠 ?可以用接口彌補
19、可以用接口彌補 用一個類實現(xiàn)多個接口,達到多繼承效果。用一個類實現(xiàn)多個接口,達到多繼承效果。 25 ? extends ? 重寫(重寫(Overriding methods) ?子類可以改變從父類繼承的行為。子類可以改變從父類繼承的行為。 ?被重寫方法的返回值、方法名、參數(shù)列表要被重寫方法的返回值、方法名、參數(shù)列表要 與父類中的方法完全一樣。與父類中的方法完全一樣。 26 Overriding 示例示例 public class Stack private Vector items; / code for Stacks methods and constructor not shown / o
20、verrides Objects toString method public String toString() int n = items.size(); StringBuffer result = new StringBuffer(); result.append(); for (int i = 0; i n; i+) result.append(items.elementAt(i).toString(); if (i n-1) result.append(,); result.append(); return result.toString(); 27 方法重寫的規(guī)則方法重寫的規(guī)則 必
21、須返回與原來方法完全相同的返回值。必須返回與原來方法完全相同的返回值。 方法的訪問權限不能縮小。方法的訪問權限不能縮小。 不能拋出新的例外。不能拋出新的例外。 28 ? ? ? 多多 態(tài)態(tài) An object has only one form, while a variable is polymorphism,since it can refer to objects of different forms ,polymorphism is the ability to have many different forms. 29 多多 態(tài)態(tài) ? Java允許父類對象的變量作為子類對象的變量允許
22、父類對象的變量作為子類對象的變量 使用。使用。 如:如:Employee e = new Manager( ); ?但通過該變量但通過該變量(如如e)只能訪問父類的方法,子類只能訪問父類的方法,子類 特有的部分被隱藏。特有的部分被隱藏。 ?運行時確定使用父類還是子類的方法。運行時確定使用父類還是子類的方法。 Employee e = new Manager(); e.getDetails(); 30 Super 關鍵字關鍵字 Super 指向該關鍵字所在類的父類。指向該關鍵字所在類的父類。 Public class Empolyee private String name ; private
23、int salary; public String getDetails( ) return “Name: ”+name+“ nSalary:”+salary; public class Manager extends Empolyee private String department ; public String getDetails( ) return super .getDetailes( )+ nDepartment: “+ department; 31 “instanceof” 及類型強制轉換及類型強制轉換 ? Instanceof 測試對象類型測試對象類型 Empolyee a
24、 = new Manager(); 則則 a instanceof Manager 為為true; ?類型轉換類型轉換 父類弱、子類強,指向父類的引用不能直接按子類引用,父類弱、子類強,指向父類的引用不能直接按子類引用, 必須要強制類型轉換后才能作為子類的引用使用。必須要強制類型轉換后才能作為子類的引用使用。 例:例:public void method( Employee e) if (e instanceof Manager) Manager m = (Manager) e ; m.department = “”; 32 子類對象的初始化子類對象的初始化 初始化對象是很結構化的。初始化對象
25、是很結構化的。 在對對象初始化時,分三步:在對對象初始化時,分三步: ?分配空間,并初始化為 分配空間,并初始化為“ 0” 值。值。 ?按繼承關系從頂向下顯式初始化。 按繼承關系從頂向下顯式初始化。 ?按繼承關系從頂向下調用構造函數(shù)。按繼承關系從頂向下調用構造函數(shù)。 33 ? ? 調用父類構造方法調用父類構造方法 ?缺省是不帶參數(shù)的構造方法。缺省是不帶參數(shù)的構造方法。 ?如果需要調用特殊的父類構造方法,則需在如果需要調用特殊的父類構造方法,則需在 子類構造方法中第一行通過子類構造方法中第一行通過 super( )調用。調用。 class Employee . public Employee(
26、String n) name=n; class Manager entends Emplyee public Manager( String s,String d) super(s); . 34 Object 及其子類及其子類 Object定義了所有對象都需要的狀態(tài)和行定義了所有對象都需要的狀態(tài)和行 為。如對象之間的比較、將對象轉換為字為。如對象之間的比較、將對象轉換為字 符串、等待某個條件變量、當某條件變量符串、等待某個條件變量、當某條件變量 改變時通知相關對象改變時通知相關對象 以及返回對象的類。以及返回對象的類。 35 Object 及其子類及其子類 在在ObjectObject子類中可
27、以重寫的方法:子類中可以重寫的方法: cloneclone equalsequals finalizefinalize toStringtoString :返回對象的字符串表示,表達的內容因具體的對象而異:返回對象的字符串表示,表達的內容因具體的對象而異 在在ObjectObject子類中不能重寫的方法:子類中不能重寫的方法: getClassgetClass notifynotify notifyAllnotifyAll waitwait 36 ? ? ? ? ? ? ? ? ? ? Object 的clone方法 ? aCloneableObject aCloneableObject.clone();.clone(); /從已有的對象創(chuàng)建從已有的對象創(chuàng)建 新的對象新的對象 ?注意:注意: ? aCloneableObjectaCloneableObject 必須實現(xiàn)了必須實現(xiàn)了Cloneable接口接口 ?Object.clone()是是shallow copy 而不是而不是 deep
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育政策如何助力農村地區(qū)的教育發(fā)展
- 教育心理學的前沿理解混合學習環(huán)境下的學習行為
- 旗袍協(xié)會團建活動方案
- 時尚活動站臺活動方案
- 文創(chuàng)公司公關策劃方案
- 旅游講解活動方案
- 扶貧文藝隊活動方案
- 護理病人活動方案
- 手機店依舊換新活動方案
- 手臂傳球活動方案
- 第22課 現(xiàn)代科技革命和產(chǎn)業(yè)發(fā)展(課件)-【中職專用】《世界歷史》(高教版2023基礎模塊)
- TDT 1015.2-2024 地籍數(shù)據(jù)庫 第2部分:自然資源(正式版)
- 變更撫養(yǎng)權協(xié)議書
- 九年級數(shù)學教學教學反思5篇
- 云南省昆明市盤龍區(qū)2024年八年級下學期期末數(shù)學試卷附答案
- 2022-2023學年河南省鄭州市高一下學期期末考試數(shù)學試題(解析版)
- 2023初三一模閔行英語卷+答案
- 傳感器與自動檢測技術
- 工程管理之施工資料管理培訓
- 電磁鐵實驗:探索電磁鐵的吸附力和工作原理
- 小學低年級自主識字的教學策略
評論
0/150
提交評論