第4章 Java面向?qū)ο缶幊袒A(chǔ).ppt_第1頁
第4章 Java面向?qū)ο缶幊袒A(chǔ).ppt_第2頁
第4章 Java面向?qū)ο缶幊袒A(chǔ).ppt_第3頁
第4章 Java面向?qū)ο缶幊袒A(chǔ).ppt_第4頁
第4章 Java面向?qū)ο缶幊袒A(chǔ).ppt_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1,第4章 Java面向?qū)ο缶幊袒A(chǔ),2,教學內(nèi)容,3,教學內(nèi)容,4,教學目標,了解并熟悉面向?qū)ο蟮幕靖拍睢?掌握什么是類,以及如何定義類。 掌握構(gòu)造方法的定義、作用,以及如何實現(xiàn)類的構(gòu)造方法。 掌握如何創(chuàng)建類對象、如何使用類對象。 掌握靜態(tài)成員和實例成員的使用方法,以及二者之間的區(qū)別。 掌握類成員的訪問權(quán)限的設(shè)置方法,以及使用的原則。,5,教學重點,本章首先介紹面向?qū)ο蟮囊恍┗靖拍?,讓讀者初步了解面向?qū)ο蠡靖拍?接著詳細講解在Java中類的含義、如何定義類、如何由類定義對象以及二者的關(guān)系 然后講解對象的使用方法、靜態(tài)成員、實例成員、成員權(quán)限的設(shè)置等內(nèi)容。 本章將通過一個實例涵蓋本章的各

2、個知識點,讓讀者由淺入深、由少到多、逐步深入與擴充 最終形成一個完整的案例,幫助讀者理解和運用本章知識點。,6,類和對象 : 類是一類對象的抽象或原形,它定義了該類對象的共同的屬性和方法。 真實世界中每個看得見的東西都是對象 用戶可以使用類的定義來生成該類的對象,生成的對象將可以使用該類的所以組件。 屬性與方法: (1)屬性成員(field)域:是存儲數(shù)據(jù)項的變量。成員域也稱類的數(shù)據(jù)成員(data member)。“屬性”是對象的靜態(tài)描述。 (2)方法(method):定義了用戶可以進行的操作,也決定了利用類的對象可以做的事情。 “方法”則是對象的動態(tài)描述,或解釋為操作對象的方式 。,4.1

3、面向?qū)ο蟮幕靖拍?7,例如: 如何描述“銀行賬戶”這個對象呢? 將它分為屬性與方法兩個方面考慮,與“銀行賬戶”對象相關(guān)的靜態(tài)屬性主要有銀行賬號、戶名、密碼、賬戶余額等 而與“銀行賬戶”相關(guān)的動態(tài)方法有存款、取款、查詢余額、更改密碼等。 事實上對象本來就應(yīng)該只是一個抽象的輪廓,因為必須依問題的不同來描述不同的對象,而不是詳細地將一個對象描述出來。,4.1 面向?qū)ο蟮幕靖拍?8,用來描述繼承最簡單的一句話就是“保留、修改與新增”。 在繼承關(guān)系下,原來的對象稱作父類對象,而新對象稱作子類對象,父類和子類之間具有“相同種類”的關(guān)系。,對象的繼承,9,一是當用戶在創(chuàng)造新對象時,應(yīng)該以繼承現(xiàn)有對象為前

4、提,而不是絞盡腦汁再去創(chuàng)造另一個全新的對象; 另一方面是應(yīng)該盡量以現(xiàn)成的對象來建構(gòu)程序 例如 假使定義了一個“人”對象,那么當定義“導游”對象時應(yīng)該以繼承“人”對象為出發(fā)點,然后進一步去做“保留、修改和新增”的工作,就可在所有需要導游對象的程序中重復使用 最佳例子,就是Java所提供的各種API,這些API中的類間可相互繼承,并不斷派生新增功能,對象的重用,10,就是將對象的屬性和方法作適當程度的“包裝”,只留下操作的接口 封裝也可以說成是一種“信息隱藏”(information hiding)。 封裝的最大好處就是會使對象容易使用,用戶無須去關(guān)心其內(nèi)部的細節(jié)。 例如,“錄音機”是一個對象,無

5、論其內(nèi)部構(gòu)造有多復雜,用戶總是由各種“錄音鍵”、“播放鍵”、“停止鍵”等按鍵來操作錄音機。,對象的封裝,11,是指在一般類中定義的屬性或服務(wù)被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。 這使得同一個屬性或服務(wù)在一般類及其各個特殊類中具有不同的語義。 例如: “幾何圖形”的“繪圖”方法,“橢圓”和“多邊形”都是“幾何圖形”的子類,但其“繪圖”方法功能不同。,對象的多態(tài)性,12,Java中使用類的語法: 存取修飾詞 class 類名稱 extends 單一父類 implements 接口1, 接口2 /屬性; /方法; 用戶在指定“類名稱”時必須遵守Java的命名規(guī)則。 另外,在J

6、ava語言中,英文字母大小寫視為不同。,4. 2 類的定義,13,屬性成員是具有某種數(shù)據(jù)類型的變量或常量 。 定義屬性成員的語法如下: 訪問權(quán)限修飾符 final static 數(shù)據(jù)類型 名稱; 最簡單的屬性成員定義如下: 數(shù)據(jù)類型 名稱; 屬性成員的數(shù)據(jù)類型可分為原始數(shù)據(jù)類型和派生數(shù)據(jù)類型兩大類。,屬性成員的定義,14,【例4-1】定義“銀行賬戶”類,主要包括姓名、賬號、密碼及賬戶余額四個屬性成員。 class Cust / Cust類 / 定義屬性成員 String name; / 字符串 int ID; / 整型變量 String PWD; / 字符串 int money; / 整型變量

7、 ,屬性成員的定義,15,【例4-2】修改上例定義的“銀行賬戶”類,聲明四個屬性成員時直接為屬性變量賦值。 class Cust / Cust類 / 聲明變量并指定變量值 String name = 張三; / 字符串 int ID = 001; / 整型變量 /聲明常數(shù),并指定常數(shù)值 / 將串123456指定給字符串變量PWD final String PWD = 123456; / 將常數(shù)50000指定給整型變量money final int money = 50000;,屬性成員的定義,16,方法成員,是數(shù)行程序代碼的集合,用來操作類中的屬性成員。其包括方法頭和方法體兩個部分。 定義方法

8、成員的語法如下: 訪問權(quán)限修飾符 final static abstract 返回值數(shù)據(jù)類型 名稱(參數(shù)列表)throws異常類 /方法主體 ,方法成員的定義,17,例如在前述的“銀行賬戶”類中,需要進行取錢和存錢,可以定義方法如下: int getMoney(int deposit) return money= money - deposit; void saveMoney(int deposit) money = money + deposit; ,方法成員的定義,18,方法成員,是數(shù)行程序代碼的集合,用來操作類中的屬性成員。其包括方法頭和方法體兩個部分。 定義方法成員的語法如下: 訪問權(quán)

9、限修飾符 final static abstract 返回值數(shù)據(jù)類型 名稱(參數(shù)列表)throws異常類 /方法主體 ,方法成員的定義,19,1.案例描述 建立一個銀行賬戶類,要求能夠存放用戶的賬號、姓名、密碼和賬戶余額等個人信息,并包含存款、取款、查詢余額和修改賬戶密碼等操作 2.案例分析 本案例創(chuàng)建一個銀行賬戶類即可,屬性成員包含四項: 密碼和賬戶姓名可以定義為String類型 賬號和賬戶余額可以定義為int類型 方法成員,即各項操作,只需通過參數(shù)的傳遞,修改類中相應(yīng)的屬性成員即可,4.3 案例分析:定義銀行賬戶類,20,3.案例實現(xiàn) 見Cust1 .java 4.歸納與提高 本例中,應(yīng)掌

10、握類的定義的形式和方法。 在定義類時,根據(jù)屬性成員的實際含義選用恰當?shù)念愋?,并提供需要的方法成員,即操作。 注意 類中定義的屬性成員在本類中都可見,要區(qū)別其與形參的不同。 形參的作用域是其所定義的方法體內(nèi) 而類的屬性成員的作用域是整個類的范圍。,4.3 案例分析:定義銀行賬戶類,21,可以把類看成一個數(shù)據(jù)類型,這種數(shù)據(jù)類型就是對象類型。 對象類型和基本數(shù)據(jù)類型有著本質(zhì)上的區(qū)別 聲明對象變量之后,必須用運算符new創(chuàng)建對象實體之后,才能使用對象。 new關(guān)鍵字的作用有以下幾點: (1)為對象分配內(nèi)存空間。 (2)調(diào)用類的構(gòu)造方法。 (3)為對象返回一個引用。,4.4 對象的定義和引用,22,構(gòu)造

11、方法必須以類名作為方法的名稱,且不返回任何值 也就是說構(gòu)造方法是名稱為類名的特殊方法。 【例4-3】定義“銀行賬戶”類的構(gòu)造方法,實現(xiàn)對銀行賬戶屬性變量的賦值操作。 Cust(String newName, int newID, String newPWD, int newMoney) name = newName; ID = newID; PWD = newPWD; money = newMoney; ,構(gòu)造方法,23,在Java類中,最少要有一個構(gòu)造方法。 類的構(gòu)造方法可以顯式定義,也可以隱式定義。 系統(tǒng)使用默認的構(gòu)造方法來初始化對象時,將類中的變量自動初始化為該類型的默認值。 整型初始化

12、為0 浮點型初始化為0.0 字符型初始化為u0000 邏輯型初始化為false 類對象初始化為null等,構(gòu)造方法,24,構(gòu)造方法是一個特殊的方法,其具有以下特點: (1)構(gòu)造方法的方法名稱必須與類名相同。 (2)構(gòu)造方法沒有返回類型,也不能定義為void。 (3)構(gòu)造方法的主要作用是完成對象的初始化工作,它能夠把定義對象時的參數(shù)傳給對象的域。 (4)構(gòu)造方法不能由編程人員調(diào)用,而由系統(tǒng)調(diào)用。 (5)一個類可以定義多個構(gòu)造方法,即構(gòu)造方法可以重載。但如果沒有定義構(gòu)造方法,則編譯系統(tǒng)會自動插入一個無參數(shù)的默認構(gòu)造方法,這個默認構(gòu)造方法沒有任何代碼。,構(gòu)造方法,25,為了在程序中使用對象,首先要聲

13、明和創(chuàng)建一個對象,然后給它發(fā)送消息,即調(diào)用它的方法。 例如: Cust myCust; Cust = new Cust(Tom,100,12345,10000); 等效于 Cust myCust = new Cust(Tom,100,12345,10000);,對象的創(chuàng)建,26,對象的創(chuàng)建,Cust myCust;,myCust = new Cust(Tom,100,12345,10000);,0 x0012ff70,myCust,27,類、引用和對象之間的關(guān)系如圖4-3所示。,對象的創(chuàng)建,28,在類的作用域中,一個類中聲明的成員變量和方法可由類中的所有方法訪問,并可用它的名稱進行引用。 在類

14、的作用域外部,類中聲明的成員變量和方法的存取必須通過該類或該類的對象和點操作符(稱為類成員存取操作符)來存取 在類的外部調(diào)用成員變量和成員方法的語法分別為: 對象名.成員變量名; 對象名.方法名(形參列表); 例如: Cust myCust = new Cust(Tom,100,11111,10000); myCust.setMoney(5000);,對象的使用,29,Java提供了資源回收機制,自動銷毀無用的對象,收回其所占用的空間。 如果需要主動釋放對象,或在釋放對象時需要執(zhí)行特定的操作,在類中可以定義finalize()方法 finalize()方法沒有參數(shù),也沒有返回值。一個類只能有一

15、個finalize()方法,其基本的形式如下: protected void finalize() 方法體; ,對象的銷毀,30,主方法,包含主方法的類稱為主類,主類是程序執(zhí)行的入口點。在一個.java文件中,可以定義多個類,但只能有一個主類。 【例4-4】定義一個WelcomeDemo類,并輸出“歡迎來到Java的世界”。 class WelcomeDemo / 主方法 public static void main(String args) System.out.println(歡迎來到Java的世界.); ,main( )方法,31,【例4-5】定義一個ArgsDemo類,并可將向mai

16、n()方法傳遞的數(shù)據(jù)值依次輸出。 public class ArgsDemo public static void main(String args) for (int i=0; iargs.length; i+) System.out.print(argsi); 在命令提示符下 javac ArgsDemo.java java ArgsDemo a b c 輸出結(jié)果:abc,main( )方法,32,1.案例描述 建立一個銀行賬戶類,要求能夠存放用戶的賬號、姓名、密碼和賬戶余額等個人信息,并包含存款、取款、查詢余額和修改賬戶密碼等操作,并用此類創(chuàng)建對象,對象的賬號為100,姓名為Tom,密碼

17、為11111,賬戶余額為10000。 2.案例分析 建立銀行賬戶類Cust之后,通過new操作符調(diào)用類的構(gòu)造方法,將各項屬性成員信息傳給對象,并在主函數(shù)中調(diào)用類的方法成員。 3.案例實現(xiàn) 見Cust2.java,4.5 案例分析:銀行賬戶對象的創(chuàng)建,33,Java的類中可以包含兩種成員,實例成員和靜態(tài)成員。 一般在類里定義的成員是每個由此類產(chǎn)生的對象都擁有的,因此可以稱之為實例成員或?qū)ο蟪蓡T. 如果需要讓類的所有對象在類的范圍內(nèi)共享某個成員,而這個成員不屬于任何由此類產(chǎn)生的對象,它是屬于整個類的,這種成員稱之為靜態(tài)成員或類成員。,4.6 靜態(tài)成員與實例成員,34,用static 修飾符的屬性成

18、員為靜態(tài)屬性。 一個靜態(tài)屬性只標識一個存儲位置。無論創(chuàng)建了多少個類實例,靜態(tài)屬性永遠都在同一個存儲位置存放其值,靜態(tài)屬性是被共享的,靜態(tài)屬性與實例屬性,35,例如 class Cust static String bankName=建設(shè)銀行; int selfNum=0; static int allNum=0; Cust(String newName,int newID,String newPWD,int newmoney) allNum+; selfNum=allNum; ,靜態(tài)屬性與實例屬性,36,靜態(tài)方法是不向調(diào)用它的對象施加操作的方法。 使用“類名.方法名”來調(diào)用靜態(tài)方法 在以下兩種

19、情況下使用靜態(tài)方法: (1)該方法不需要訪問對象的狀態(tài),其所需的參數(shù)都通過顯示參數(shù)提供(如Math.pow方法)。 (2)該方法只需要訪問類的靜態(tài)屬性。,靜態(tài)方法與實例方法,37,類的成員或者是靜態(tài)成員,或者是實例成員。 一般說來,將靜態(tài)成員看作屬于類,將實例成員看作屬于對象(類的實例)。 1靜態(tài)成員的特征 (1)當在 E.M 形式的成員訪問中引用靜態(tài)成員時,E 必須是成員 M 的類型。 (2)一個靜態(tài)屬性只標識一個存儲位置。無論創(chuàng)建了多少個類的實例,永遠都只有靜態(tài)屬性的一個副本。 (3)靜態(tài)方法不在某個特定實例上操作,在這樣的方法中引用 this 是錯誤的。,靜態(tài)成員與實例成員的特征,38,

20、2實例成員的特征 (1)當在 E.M 形式的成員訪問中引用實例成員時,E 是成員 M 的類型的實例。 (2)類的每個實例分別包含一組該類的所有實例字段。 類的每個實例都為每個實例字段建立一個副本。也就是說類的每個實例的實例字段的存儲位置是不相同的。 (3)實例方法在類的給定實例上操作,此實例可以作為 this訪問。 靜態(tài)成員與實例成員歸納如下: (1)靜態(tài)方法可以訪問靜態(tài)成員變量,不可以訪問實例成員變量。 (2)實例方法可以訪問靜態(tài)成員變量,可以訪問實例成員變量。,靜態(tài)成員與實例成員的特征,【例4-6】靜態(tài)方法與實例方法的區(qū)別。 public class StaticDemo static d

21、ouble pi=3.14; /靜態(tài)變量,類變量 double pix=3.14; /實例變量,對象變量 double getArea() /實例方法 /類變量,實例方法能用類變量 return pi*3*3; static double getArea1() return pi*3*3; /類方法能用類變量 double getArea2() /實例方法能用實例變量 return pix*3*3; /static double getArea3() /return pix*3*3; /類方法不能用實例變量 / ,【例4-7】靜態(tài)成員的加法運算。 class HasStatic private

22、 static int x = 100; public static void main(String args) HasStatic hs1 = new HasStatic(); HasStatic hs2 = new HasStatic(); hs1.x+; hs2.x+; hs1.x+; System.out.println(x=+x); 程序運行結(jié)果如下: X=103,41,(1)this調(diào)用本類中的屬性,也就是類中的成員變量。 this.成員變量名 (2)this調(diào)用本類中的其他方法。 this.成員方法名(參數(shù)表) 其中,成員方法名前的this可以省略。 (3)this調(diào)用本類中的

23、其它構(gòu)造方法。 this(參數(shù)表) (4)返回對象的值 可以使用return this,來返回某個類的引用。,關(guān)鍵字this的使用,42,成員方法的重載 每一成員方法都有其簽名,方法的簽名由方法的名稱以及它的形參的數(shù)量、每個形參的類型組成。具體說來,方法簽名不包含返回類型。 在類中如果聲明有多個同名的方法但它們的簽名不同,則稱為方法的重載。 構(gòu)造方法的重載 類定義中含有兩個以上其參數(shù)個數(shù)或類型不同的實例構(gòu)造方法時,稱為構(gòu)造方法重載。 產(chǎn)生對象的格式是如下: new 類名(參數(shù)列表);,4.7 方法的重載,43,例如重載Cust類的構(gòu)造方法如下: Cust() name = ; ID = 0;

24、PWD = ; money = 0; Cust(String newName,int newID,String newPWD,int newmoney) name = newName; ID = newID; PWD = newPWD; money = newmoney; ,4.7 方法的重載,44,在創(chuàng)建對象時,可以根據(jù)需要用不同的方式創(chuàng)建對象,對對象完成不同的初始化操作 例如執(zhí)行如下的兩條語句: Cust st1 = new Cust(Tom,100,11111,10000); Cust st2 = new Cust();,4.7 方法的重載,45,1.案例描述 建立一個銀行賬戶類,要求能

25、夠存放用戶的賬號、姓名、密碼、賬戶余額、賬號的流水號等個人信息,以及所在銀行名稱、總賬戶數(shù)等公共信息,功能方面要包含存款、取款、查詢余額、修改賬戶密碼等操作,要求采用不同的構(gòu)造方法來構(gòu)造實例對象。 2.案例分析 分別創(chuàng)建類的屬性成員和方法成員,實現(xiàn)賬戶的各項操作。 3.案例實現(xiàn) 見Cust3.java,4.8 案例分析:銀行賬戶類構(gòu)造方法的重載,46,類的封裝 類的封裝性的含義是將數(shù)據(jù)和對數(shù)據(jù)的操作組合起來構(gòu)成類,類是一個不可分割的獨立單位。類中既要提供與外部聯(lián)系的接口,同時又要盡可能隱藏類的實現(xiàn)細節(jié)。 訪問控制 Java為類中的成員變量和成員方法設(shè)置了四種訪問權(quán)限,為類本身設(shè)置了兩種訪問權(quán)限。 public(公有)、protected(保護)、缺省和private(私有) 聲明一個類,可以使用的權(quán)限修飾符只有public和缺省兩種,不能使用protected或private。,4.9 類的封裝和訪問控制,47,(1)public 被public修飾的成員變量和成員方法可在所有類中被訪問 (2)protected 被protected修飾的成員變量和成員方法可在聲明它們的類、該類的子類、位于同一個包中的類

溫馨提示

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

評論

0/150

提交評論