chap4 抽象、封裝與類_第1頁
chap4 抽象、封裝與類_第2頁
chap4 抽象、封裝與類_第3頁
chap4 抽象、封裝與類_第4頁
chap4 抽象、封裝與類_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1Chap4 抽象、封裝與類類的定義和對象的使用以及面向?qū)ο蟪绦蛟O(shè)計的基本技術(shù)與方法2主要內(nèi)容 抽象與封裝 Java的類 類的修飾符(非訪問控制符) 域(靜態(tài)屬性,變量) 方法(動態(tài)屬性) 訪問控制符 類的設(shè)計34.1抽象與封裝 抽象 去除掉被研究對象中與主旨無關(guān)的次要部分,僅僅抽取與研究有關(guān)的實質(zhì)性內(nèi)容加以考慮。在軟件開發(fā)過程中使用的抽象有兩類:過程抽象和數(shù)據(jù)抽象 過程抽象:將系統(tǒng)劃分為若干部分,強調(diào)過程和步驟 數(shù)據(jù)抽象:系統(tǒng)中的數(shù)據(jù)和數(shù)據(jù)上的操作結(jié)合在一起,把他們抽象為抽象數(shù)據(jù)類型類4 封裝 利用抽象數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護在抽象數(shù)據(jù)類型內(nèi)部,系統(tǒng)的其他部分通過

2、包裹在數(shù)據(jù)外面的操作與數(shù)據(jù)進行交互。 在面向?qū)ο蟪绦蛟O(shè)計中,這個抽象數(shù)據(jù)類型被稱作”類” 安全性和可復(fù)用性提高5Java的類 系統(tǒng)定義的類 java類庫中的類 用戶自定義的類Java類庫由開發(fā)人員或軟件供應(yīng)商編寫是java語言的重要組成部分,實現(xiàn)了程序運行基本的功能,能否掌握和運用好類庫決定了編程能力的高低。Java基本語法規(guī)則和類庫的學(xué)習(xí)6常用的包 根據(jù)功能不同,java類庫被劃分為若干不同的包。Java的類庫在不斷擴展,功能也越來越完善。S可以找到類庫聯(lián)機手冊 Java.lang包 核心類庫 包含程序運行必不可少的系統(tǒng)類?;緮?shù)據(jù)類型,基本數(shù)學(xué)函數(shù),字符串處理,線程和異常處理等。默認加載1

3、.Java.io包 基本輸入輸出類庫7 java.util包含一些低級的實用工具,如Date類,Vector類等。 java.util.zip實現(xiàn)文件壓縮功能。 java.awt包 構(gòu)建圖形用戶界面的類庫,繪圖和組件以及事件響應(yīng)等。 java.math整數(shù)算術(shù)運算及十進制算術(shù)運算 java.text處理文本或日期格式 java.applet實現(xiàn)運行于Internet瀏覽器的工具類庫,java.applet.Applet java.awt.event包是java.awt包中Event類的擴充8 實現(xiàn)網(wǎng)絡(luò)功能的類庫 java.sql實現(xiàn)數(shù)據(jù)庫鏈接的類庫,可以使java程序訪問不同類型的數(shù)據(jù)庫。 j

4、ava.rmi java.rmi.registry java.rmi.server實現(xiàn)RMI功能(遠程方法調(diào)用) java.secuirty等提供了安全性控制和管理。 javax是java的擴展包,涉及圖形,多媒體和事務(wù)處理等方面的類庫9使用系統(tǒng)類的方法 繼承系統(tǒng)類 class myapplet extends Applet 創(chuàng)建系統(tǒng)類的對象 Label l1=new Label(“”); 直接使用系統(tǒng)類 System.out.println()u 系統(tǒng)類應(yīng)該是用戶程序可見的,因此要引入類庫 。import java.awt.*;import的作用是編譯時將系統(tǒng)類的字節(jié)碼加入到用戶的java程

5、序中。10用戶自定義類 根據(jù)特定問題,用戶自己編寫的類。class studentString sname;int snum;teacher tt;public String getSname() return sname;public void setSname(String sname)this.sname = sname; public teacher getTt() return tt; public void setTt(teacher tt) this.tt = tt; public void evaluatt(float ff ) this.tt.tff =ff; 11創(chuàng)建對象與

6、定義構(gòu)造函數(shù) 創(chuàng)建對象格式:類名 新建對象名=new 構(gòu)造函數(shù)()類名 新建對象名=new 類名()e.g Student sd1=new Student(); TextField input=new TextField(6);new 為新建對象開辟內(nèi)存空間的算符。構(gòu)造函數(shù)初始化對象12變量和對象的區(qū)別 聲明格式 int i=10 Integer i=new Interger(10)1010方法方法parseInt方法方法n變量占內(nèi)存小變量占內(nèi)存小 對象占內(nèi)存大對象占內(nèi)存大只有一個數(shù)值只有一個數(shù)值 除了數(shù)值還有方法除了數(shù)值還有方法引用引用 i 對象名對象名.屬性名屬性名 要訪問或調(diào)用一個對象的

7、域或者方法,首先要訪問或調(diào)用一個對象的域或者方法,首先訪問對象,然后用算符訪問對象,然后用算符“.”鏈接這個對象的鏈接這個對象的某個域或方法。例如:某個域或方法。例如:i.parseInt(s) i.value 3號樓號樓303 13 構(gòu)造函數(shù) 作用是對對象進行初始化的工作對象中含有多個域(變量),需要若干賦值語句,將這些賦值語句組合成一個特殊的方法,這個特殊方法就是構(gòu)造函數(shù)特殊性: 方法名與類名相同 沒有返回類型 也沒有返回值 主要是初始化工作,也可以做其他操作 一般不能由編程人員顯示調(diào)用 在創(chuàng)建對象時,系統(tǒng)自動調(diào)用14 如果在類中不定義構(gòu)造函數(shù),系統(tǒng)會默認這個類的一個空構(gòu)造函數(shù),沒有參數(shù),

8、也沒有任何具體語句。 可以構(gòu)造一個或幾個構(gòu)造函數(shù)。 如:Student(String sname) Student(String sname,int snum) 看例子PhoneCard類 和Car類15類的修飾符 class 類名 訪問控制修飾符:限定類或者其屬性是否可以被其他部分訪問和調(diào)用。非訪問控制修飾符abstract final被abstract修飾的類稱為抽象類被final修飾的類稱為最終類16抽象類 形式 如: abstract class bird 是沒有具體對象的概念類.如:鳥,電話卡 要想使用抽象類必須為它創(chuàng)建子類。 抽象類是它的所有子類的公共屬性的集合,所以使用抽象類的優(yōu)

9、點是可以充分利用這些公共屬性來提高開發(fā)和維護程序的效率。17abstract class PhoneCard double balance; void performDial() . 如果所有電話卡類的performDial()的返回值要改為boolean,不用修改所有的子類,只要在父類中作修改即可?;蛘咴黾右粋€方法abstract class PhoneCard double balance; boolean performDial() void performDial() 18最終類 一個類如果被final所修飾,說明它不能再有子類了。 被定義為final的類通常是一些有固定作用,用來完成

10、某種標(biāo)準(zhǔn)功能的類。比如引用數(shù)據(jù)類型,實現(xiàn)網(wǎng)絡(luò)功能的類等等。電話電話卡類卡類無卡號類無卡號類有卡號類有卡號類磁卡磁卡IC卡卡校園校園201卡卡200卡卡IP卡卡public final IcCard19 注意: abstract和final修飾符不能同時修飾一個類。因為abstract類自身沒有對象,必須派生子類;而final類不可能有子類。 abstract和final可以分別和其他修飾符組合。如:public abstract 或public final20域 定義一個類時,需要定義一組稱為域的變量保存類或?qū)ο蟮臄?shù)據(jù)。 無特殊說明(無static修飾)的域稱為實例變量,在類定義的時候被聲明,

11、在創(chuàng)建對象時才分配空間,并保存一個對象的數(shù)據(jù),實例變量的聲明周期與對象存在的時間相同。 域的類型可以是簡單數(shù)據(jù)類型也可以是數(shù)組,向量,類或接口。 在一個類中,域名應(yīng)是唯一的(類中不能重名)21域的修飾符 域的修飾符有域的修飾符有static, final, volatile static修飾的域稱為靜態(tài)域修飾的域稱為靜態(tài)域 final修飾的域稱為最終域修飾的域稱為最終域 volatile修飾的域稱為易失域修飾的域稱為易失域22靜態(tài)域靜態(tài)域用用static修飾的域修飾的域 靜態(tài)域僅屬于類的域,不屬于任何一個類的對靜態(tài)域僅屬于類的域,不屬于任何一個類的對象象 靜態(tài)域不保存在某個對象的內(nèi)存區(qū)域中,而

12、只靜態(tài)域不保存在某個對象的內(nèi)存區(qū)域中,而只保存在類的內(nèi)存區(qū)域中的公共存儲單元,任何保存在類的內(nèi)存區(qū)域中的公共存儲單元,任何一個對象訪問和修改的都是同一個內(nèi)存單元的一個對象訪問和修改的都是同一個內(nèi)存單元的內(nèi)容內(nèi)容objAint bclass myclassstatic int aint bobjBint b23靜態(tài)初始化器靜態(tài)初始化器 是由關(guān)鍵字是由關(guān)鍵字static引導(dǎo)的一對大括號括起來的語引導(dǎo)的一對大括號括起來的語句組,作用是為了完成初始化工作句組,作用是為了完成初始化工作 形式:形式:static 語句組;語句組; 與構(gòu)造函數(shù)的區(qū)別與構(gòu)造函數(shù)的區(qū)別構(gòu)造函數(shù)是初始化對象,靜態(tài)初始化器是構(gòu)造函

13、數(shù)是初始化對象,靜態(tài)初始化器是對類自身進行初始化對類自身進行初始化構(gòu)造函數(shù)是在用構(gòu)造函數(shù)是在用new運算符產(chǎn)生新對象時由運算符產(chǎn)生新對象時由系統(tǒng)自動執(zhí)行,而靜態(tài)初始化器是在它所屬系統(tǒng)自動執(zhí)行,而靜態(tài)初始化器是在它所屬的類加載入內(nèi)存時由系統(tǒng)調(diào)用執(zhí)行的類加載入內(nèi)存時由系統(tǒng)調(diào)用執(zhí)行靜態(tài)初始化器不是方法,沒有方法名,返靜態(tài)初始化器不是方法,沒有方法名,返回值和參數(shù)列表回值和參數(shù)列表24 最終域最終域 用用final修飾的域修飾的域 用用final修飾的常量在整個程序的執(zhí)行過程中不修飾的常量在整個程序的執(zhí)行過程中不會改變會改變 需要說明常量的數(shù)據(jù)類型需要說明常量的數(shù)據(jù)類型 同時需要指出常量的具體取值同時

14、需要指出常量的具體取值 因為所有類對象的常量成員,其數(shù)值都是固定因為所有類對象的常量成員,其數(shù)值都是固定一致的,為節(jié)省空間,常量通常聲明一致的,為節(jié)省空間,常量通常聲明static 如:如:static final String connectNumber=“200” 易失域易失域 用用volatile修飾的域修飾的域 易失域可能同時被幾個線程所控制和修改,使易失域可能同時被幾個線程所控制和修改,使用時要特別注意用時要特別注意25方法方法 方法是類的方法是類的動態(tài)屬性動態(tài)屬性,標(biāo)志了類所具有的功能和操作,標(biāo)志了類所具有的功能和操作,用來把類和對象的數(shù)據(jù)封裝在一起用來把類和對象的數(shù)據(jù)封裝在一起

15、方法的修飾符分為方法的修飾符分為abstract, final, static,native,synchornized abstract修飾的方法修飾的方法 抽象方法抽象方法 是一種只有方法頭沒有方法體的方法,沒有任何具是一種只有方法頭沒有方法體的方法,沒有任何具體操作體操作 abstract void mymethod(參數(shù)列表參數(shù)列表); 抽象方法必須存在于抽象類之中抽象方法必須存在于抽象類之中 一個非抽象類中出現(xiàn)抽象方法是非法的一個非抽象類中出現(xiàn)抽象方法是非法的,即一個抽,即一個抽象類的子類如果不是抽象類,則它必須為父類中的象類的子類如果不是抽象類,則它必須為父類中的所與抽象方法書寫方法

16、體所與抽象方法書寫方法體 抽象類中不一定只能擁有抽象方法抽象類中不一定只能擁有抽象方法26靜態(tài)方法是屬于整個類的類方法靜態(tài)方法是屬于整個類的類方法聲明一個方法為聲明一個方法為static至少有三重含義至少有三重含義 調(diào)用此方法時必須使用類名做前綴,而不是對象名調(diào)用此方法時必須使用類名做前綴,而不是對象名 非非static方法是屬于某個對象的方法,在對象創(chuàng)建時對方法是屬于某個對象的方法,在對象創(chuàng)建時對象的方法在內(nèi)存中擁有自己專用的代碼,象的方法在內(nèi)存中擁有自己專用的代碼,而而static的方的方法是屬于整個類的法是屬于整個類的,它在內(nèi)存中的代碼段將隨著類的,它在內(nèi)存中的代碼段將隨著類的定義而分配

17、和裝載,定義而分配和裝載,不被任何一個對象專有(不被任何一個對象專有(類似于類似于靜態(tài)域靜態(tài)域)1.由于由于static方法屬于整個類的,所以它不能操縱和處理方法屬于整個類的,所以它不能操縱和處理屬于某個對象的成員變量,而只能處理屬于整個類的屬于某個對象的成員變量,而只能處理屬于整個類的成員變量,即成員變量,即 ,static方法只能處理方法只能處理static域域static修飾的方法修飾的方法 靜態(tài)方法靜態(tài)方法 27 final 修飾的方法修飾的方法 最終方法最終方法 是功能和內(nèi)部語句不能被更改的最終方法是功能和內(nèi)部語句不能被更改的最終方法,即,不能被當(dāng)前類的子類重新定義的方法即,不能被當(dāng)

18、前類的子類重新定義的方法 所有已被所有已被private修飾符限定為私有的方法,修飾符限定為私有的方法,以及包含在以及包含在final類中的方法,都被缺省地認類中的方法,都被缺省地認為是為是final的的28 native 修飾的方法修飾的方法 本地方法本地方法 一般用來聲明其他語言書寫方法體并具體實現(xiàn)一般用來聲明其他語言書寫方法體并具體實現(xiàn)方法的特殊方法,方法的特殊方法,c、c+、匯編等、匯編等 所有的所有的native方法都沒有方法體,而用分號代替方法都沒有方法體,而用分號代替 充分利用已有模塊及提高運行的效率充分利用已有模塊及提高運行的效率 影響軟件的跨平臺特性影響軟件的跨平臺特性 sy

19、nchronized 修飾的方法修飾的方法 同步方法同步方法 用來修飾用來修飾static方法(類的方法),被調(diào)用執(zhí)行方法(類的方法),被調(diào)用執(zhí)行時,將把系統(tǒng)類時,將把系統(tǒng)類Class中對應(yīng)中對應(yīng)當(dāng)前類的對象加鎖當(dāng)前類的對象加鎖 用來修飾非用來修飾非static方法(對象的方法),方法在方法(對象的方法),方法在被調(diào)用執(zhí)行前,將把被調(diào)用執(zhí)行前,將把當(dāng)前對象加鎖當(dāng)前對象加鎖29 訪問控制修飾符訪問控制修飾符 訪問控制符是一組限定類、域或方法是否訪問控制符是一組限定類、域或方法是否可以被程序里的其他部分訪問和調(diào)用的修可以被程序里的其他部分訪問和調(diào)用的修飾符飾符 其他部分程序是指本類以外的其他的類其

20、他部分程序是指本類以外的其他的類 類的訪問控制符只有一個類的訪問控制符只有一個public和缺省和缺省 域和方法的訪問控制符有:域和方法的訪問控制符有:public、private、protected和缺省訪問控制符和缺省訪問控制符30類的訪問控制修飾符類的訪問控制修飾符 public 公共類公共類 表明它可以被所有的其他類所訪表明它可以被所有的其他類所訪問引用,程序的其他部分可以創(chuàng)建這個類的對象、問引用,程序的其他部分可以創(chuàng)建這個類的對象、訪問這個類內(nèi)部可見的成員變量和調(diào)用它的可見訪問這個類內(nèi)部可見的成員變量和調(diào)用它的可見方法方法 同一包中的類可以不用任何說明相互訪問和引用,同一包中的類可以

21、不用任何說明相互訪問和引用,而對于不同包中的類是互不可見的,不能直接引用,而對于不同包中的類是互不可見的,不能直接引用,要用要用import語句加載包,語句加載包,import packgename.clsname; 一個類作為整體對程序的其他部分可見,并不代表一個類作為整體對程序的其他部分可見,并不代表類的所有域和方法也同時對程序的其他部分也可見,類的所有域和方法也同時對程序的其他部分也可見,前者只是后者的必要條件,類的域或方法是否為所前者只是后者的必要條件,類的域或方法是否為所有其他類所訪問,還要看這些域或方法自己的訪問有其他類所訪問,還要看這些域或方法自己的訪問控制符??刂品?1pub

22、lic class myclass class studentpublic class PhoneCardclass testcard32 每個每個java程序的只能有一個程序的只能有一個public類,他類,他一般情況也是主類一般情況也是主類 缺省訪問控制符缺省訪問控制符 假如一個類沒有訪問控假如一個類沒有訪問控制符,說明它具有缺省的訪問控制符。制符,說明它具有缺省的訪問控制符。 規(guī)定這個類只能被同一個包中的類訪問和引規(guī)定這個類只能被同一個包中的類訪問和引用,而不可以被其他包中的類使用,這種訪用,而不可以被其他包中的類使用,這種訪問特性又稱為包訪問性問特性又稱為包訪問性一個類作為整體對程序的

23、其他一個類作為整體對程序的其他部分可見,并不能代表類內(nèi)部部分可見,并不能代表類內(nèi)部的所有域和方法也同時對程序的所有域和方法也同時對程序其他部分可見。前者只是后者其他部分可見。前者只是后者的必要條件,類的域和方法能的必要條件,類的域和方法能否為其他類所訪問,還要看域否為其他類所訪問,還要看域和方法自己的訪問控制符和方法自己的訪問控制符33類成員類成員(域和方法域和方法)的訪問控制符的訪問控制符 被設(shè)定為被設(shè)定為public的成員可以被所有類訪問的成員可以被所有類訪問 保護訪問控制符保護訪問控制符protected修飾的方法,可以修飾的方法,可以被三種類所引用:被三種類所引用:該類自身該類自身、同包中的其他同包中的其他類類、其他包中的該類的子類其他包中的該類的子類 缺省訪問控制符的方法,也具有包訪問性,缺省訪問控制符的方法,也具有包訪問性,可以被可以被同一個包中的其他類同一個包中的其他類所訪問和調(diào)用所訪問和調(diào)用

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論