版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第五章面向?qū)ο蟪绦蛟O(shè)計的基本知識
Java程序設(shè)計本章主要內(nèi)容
面向?qū)ο笤O(shè)計的基本常識類和對象繼承特別的類接口包和名稱空間2024/12/24李飛——計算中心2/485.1面向?qū)ο笤O(shè)計的基本常識抽象過程(萬物皆可成為對象)對象:是對個體事物的抽象類:是對同種事物集合的抽象屬性:是對現(xiàn)實(shí)世界中個體中特征的抽象。方法:是對現(xiàn)實(shí)世界中某類事物的動態(tài)特征(行為)的抽象,是對象所能執(zhí)行的操作。方法描述了對象執(zhí)行操作的算法。事件:是對對象狀態(tài)發(fā)生變化的一種抽象。消息:是對“現(xiàn)實(shí)世界通知”的一種抽象,它由事件觸發(fā)并由系統(tǒng)自動發(fā)送到所有對象。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心3/48面向?qū)ο蟮某绦蛟O(shè)計的優(yōu)點(diǎn)
與人類習(xí)慣的思維方式相一致。穩(wěn)定性好。代碼的重用性大大提高可維護(hù)性好更適于開發(fā)大型軟件產(chǎn)品2024/12/24李飛——東北大學(xué)秦皇島分校計算中心4/48面向?qū)ο蟪绦蛟O(shè)計的特征封裝性繼承性多態(tài)性2024/12/24李飛——東北大學(xué)秦皇島分校計算中心5/48封裝性Java的封裝性是通過類和對象來實(shí)現(xiàn)的。類的定義是對事物特性的詳細(xì)描述。事物的特性包括靜態(tài)特性和動態(tài)特性。事物的靜態(tài)特性通過類中的成員變量來描述動態(tài)特性通過定義在類中的方法來描述。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心6/48繼承性繼承是一種由已有的類創(chuàng)建新類的機(jī)制。Java的繼承通過接口、類和對象來完成。父類:被繼承的類稱為“父類”、“基類”或“超類”。子類:繼承其它類的類稱為“子類”。接口:沒有類的實(shí)現(xiàn)部分的特殊類被稱為接口。對象:根據(jù)類生成的個體被稱為對象。Java支持類之間的單繼承。一個子類可以繼承多個接口。一個類可以生成多個對象。一個對象封裝了生成他的類的所有內(nèi)容。子類可以繼承父類或接口的中除了私有的方法和成員變量外的所有內(nèi)容。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心7/48多態(tài)性多態(tài)性:是指同一個方法或運(yùn)算符在不同的條件和情況下具有不同的功能和處理形式,即一個方法具有多種含意。實(shí)現(xiàn)多態(tài)的手段:方法的重載:同一個類中同名不同功能的多個方法。方法的重構(gòu):在子類中重寫父類中的同名方法抽象類實(shí)現(xiàn):在子類中實(shí)現(xiàn)抽象類或接口中的同名方法。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心8/48在子類中調(diào)用父類方法或成員變量的方法super.方法名(參數(shù)表);調(diào)用當(dāng)前類的方法This.方法名(參數(shù)表)或方法名(參數(shù)表)2024/12/24李飛——東北大學(xué)秦皇島分校計算中心9/485.2類和對象類類的定義對象對象的聲明對象的定義對象的初始化和賦值對象的訪問2024/12/24李飛——東北大學(xué)秦皇島分校計算中心10/35類的定義
class是類聲明的保留字?!邦愓f明修飾符”是public、abstract和final三個保留字中的一個。
public:則表明用戶定義的類是一個公共類,在一個Java程序文件中可以有若干個類,但只能有一個公共類
abstract:則說明用戶定義的類是一個抽象類,抽象類無法用new運(yùn)算符生成實(shí)例化的對象 final:則說明用戶定義的類是最終類,最終類是不可繼承的。extends子句:用于說明該類的父類。Java僅支持單繼承,因此extends保留字后只能有一個父類的名稱。Implements子句:說明將在本類中實(shí)現(xiàn)的接口。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心11/35類的定義成員變量的聲明與初始化修飾符可以是:public、private、protected、static、final。public:表示成員變量是公有的,此類成員變量可以被類中的所有方法和其他類中的方法訪問。private:表示成員變量是私有的,僅被當(dāng)前類的方法訪問和使用。protected:表示成員變量是保護(hù)類型的,此類成員變量可以被當(dāng)前類和它的子類中的語句訪問。static:表示成員變量是靜態(tài)變量或類變量。可以通過”類名.變量名”的形式被其他類訪問。非static修飾的變量僅能通過“對象名.成員變量名”的形式訪問。final:表示成員變量的值一旦定義不可更改,我們可以把用final修飾的成員變量當(dāng)成常量來用。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心12/35[修飾符]成員變量類型
成員變量名列表;或[修飾符]成員變量類型
成員變量名=成員變量初始值表達(dá)式;類的定義成員方法的定義成員方法修飾符:public、private、protectedstatic、final、abstract和synchronized返回值類型:各種數(shù)據(jù)類型成員方法名:Java標(biāo)識符參數(shù)列表和異常列表:以“,”隔開的參數(shù)和異常名。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心13/35類的定義構(gòu)造方法定義構(gòu)造方法是類中的一種特殊的方法。它的功能是在通過new運(yùn)算符創(chuàng)建類的實(shí)例對象時,初始化對象。構(gòu)造方法與普通方法的不同構(gòu)造方法的方法名必須和類名相同,且只有構(gòu)造方法名可以與類名相同。構(gòu)造方法沒有返回值類型,因為構(gòu)造方法的返回值類型就是類本身。如果一個類中沒有用戶聲明的構(gòu)造方法,則系統(tǒng)將提供缺省的構(gòu)造方法,缺省構(gòu)造方法沒有參數(shù),也沒有具體的語句,不完成任何操作。如果一個類中包含了構(gòu)造方法的說明,則系統(tǒng)不再提供缺省的構(gòu)造方法。這是通過new運(yùn)算符創(chuàng)建該類的實(shí)例對象時調(diào)用的構(gòu)造方法的實(shí)參必須和構(gòu)造方法的形參相一致。構(gòu)造方法只能在創(chuàng)建類的實(shí)例對象時,通過new運(yùn)算符引用。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心14/35例5.1:創(chuàng)建一個學(xué)生類publicclassStudent{ Stringname,education,department; booleansex=false; intage; privatedoubleheight,weight; publicstudent(){//沒有參數(shù)的構(gòu)造方法
name=newString(); education=newString("大學(xué)本科"); department="計算機(jī)應(yīng)用技術(shù)"; intage=18; height=160; weight=57.3;
}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心15/35 publicstudent(Stringn){//帶姓名參數(shù)的構(gòu)造方法
name=n; education=newString("大學(xué)本科"); department="計算機(jī)應(yīng)用技術(shù)"; intage=18; height=160; weight=57.3; }2024/12/24李飛——東北大學(xué)秦皇島分校計算中心16/35 publicdoublegetHeight(){ returnheight; } publicvoidsetHeight(doubleheight){ this.height=height; } publicdoublegetWeight(){ returnweight; } publicvoidsetWeight(doubleweight){ this.weight=weight; }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心17/35對象生成對象的步驟聲明對象。對象的聲明就是給對象命名,同時通知Java的編譯系統(tǒng),對象所占內(nèi)存空間大小。實(shí)例化對象。實(shí)例化對象是Java創(chuàng)建對象的過程。實(shí)例化對象時,Java會為對象分配必要的內(nèi)存空間,用來保存對象的數(shù)據(jù)和成員方法的代碼。同時,Java會為每個實(shí)例化的對象分配一個“引用”句柄,并把這個“引用”保存到一個變量中。“引用”實(shí)際上是一個指針,此指針指向?qū)ο笏加械膬?nèi)存區(qū)域。初始化對象。對象的初始化是為對象的成員變量賦初值。初始化對象的過程是通過類的構(gòu)造方法來實(shí)現(xiàn)的。一個類可以提供多種構(gòu)造方法,以便對新對象按不同要求進(jìn)行初始化。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心18/35對象相關(guān)語句對象聲明語句[修飾符]類名對象名;和[修飾符]類名對象名列表;實(shí)例化對象語句new類的構(gòu)造方法([參數(shù)列表]);對象名=new類的構(gòu)造方法([參數(shù)列表]);[修飾符]類名對象名=new類的構(gòu)造方法([參數(shù)列表]);2024/12/24李飛——東北大學(xué)秦皇島分校計算中心19/35給對象賦值對象名引用=被訪問對象的引用;訪問對象的語句對象名.成員變量名;對象名.成員方法名([參數(shù)列表]);2024/12/24李飛——東北大學(xué)秦皇島分校計算中心20/35例5.2:編寫一個Shape類,使其具有計算園面積和矩形面積的功能。publicclassShape{ doubler=0.0; doublea=0.0,b=0.0; publicShape(doubler){ this.r=r;//私有成員變量的賦值
} publicShape(doublewidth,doubleheight){ a=width; b=height; } publicdoublegetRound(){ returnMath.PI*r*r;//調(diào)用API中Math類的類變量
}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心21/35publicdoublegetRectangle(){ returna*b; } publicstaticvoidmain(String[]args){ Shaperectangle;//聲明對象rectangle Shaperound=newShape(5);//聲明并初始化對象round rectangle=newShape(5,4);//創(chuàng)建并初始化對象rectangle System.out.println("圓面積為:"+round.getRound());//調(diào)用成員方法
System.out.println("矩形面積為:"+rectangle.getRectangle()); }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心22/35參數(shù)傳遞問題參數(shù)傳遞:調(diào)用方法時要給出與形式參數(shù)個數(shù)相同、類型一致的實(shí)際參數(shù)。這樣Java在執(zhí)行方法時,才會把實(shí)際參數(shù)準(zhǔn)確的傳遞給形式參數(shù),進(jìn)而使方法能夠得以執(zhí)行。而這個實(shí)際參數(shù)和形式參數(shù)結(jié)合的過程被稱為參數(shù)傳遞。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心23/35參數(shù)傳遞(1)在調(diào)用重載的方法或構(gòu)造方法時。系統(tǒng)將首先根據(jù)給出的實(shí)參尋找形參類型與其完全匹配的方法和構(gòu)造方法,如果找到,就執(zhí)行它,如果沒有找到,系統(tǒng)將按照如下原則對實(shí)參進(jìn)行類型轉(zhuǎn)換,直到找到一個方法。參數(shù)傳遞過程中對于簡單數(shù)據(jù)類型,首先由低級向高級逐級轉(zhuǎn)換,即byte、short、int、long、float、double,直到找到合適的方法。當(dāng)上述轉(zhuǎn)換不能滿足要求時,編譯將出錯。布爾類型不能進(jìn)行轉(zhuǎn)換。對于引用數(shù)據(jù)類型,只能將子類轉(zhuǎn)換為父類,而不能逆向轉(zhuǎn)換。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心24/35參數(shù)傳遞(2)按值傳遞參數(shù)Eg5.3如果方法中的參數(shù)為基本數(shù)據(jù)類型,如int、double、char等,那么參數(shù)的傳遞屬于按值傳遞。在調(diào)用方法時,系統(tǒng)為形參另外開辟出專門的內(nèi)存空間,實(shí)參的值被傳遞給形參并存儲在形參的內(nèi)存空間中。方法的執(zhí)行過程中,如果對參數(shù)的值做出了改變,也只是修改了形參存儲空間中所存儲的的值,對實(shí)參并無影響。按引用傳遞eg5.4當(dāng)參數(shù)為對象、數(shù)組、字符串等引用數(shù)據(jù)類型時,參數(shù)的傳遞方式則為按引用傳遞。系統(tǒng)并沒有為形參開辟新的內(nèi)存空間,而是將實(shí)參的引用傳遞給形參,形參和實(shí)參共用一塊內(nèi)存空間,任何對形參的操作同時也是對實(shí)參的操作。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心25/35在使用類時的多態(tài)性問題賦值兼容原則規(guī)定,在繼承中允許向上賦值但不允許向下賦值。類的變量允許指向本類的實(shí)例,也可以指向其子類或后代類的實(shí)例。反過來是不允許的,即類的變量不能指向祖先類的實(shí)例。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心26/35轉(zhuǎn)換對象引用時的原則:
沿繼承層次向“上”轉(zhuǎn)換總是合法的。例如,把Teacher引用轉(zhuǎn)換為Person引用。此種方式下不需要轉(zhuǎn)換運(yùn)算符,只用簡單的賦值語句就可完成。
對于向“下”轉(zhuǎn)換,只能是父類到子類轉(zhuǎn)換,其他類之間是不允許的。例如,把Student引用轉(zhuǎn)換為Teacher引用肯定是非法的,因為Student類和Teacher類之間沒有繼承關(guān)系。程序中可使用instanceof來判別對象的實(shí)際類型。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心27/355.3繼承Java支持類之間的單繼承。多繼承由接口實(shí)現(xiàn)。Object類是所有類的父類。無論一個類有沒有明確指定父類,都可看作是從Object類直接或間接派生來的。Object類包含了所有Java類的公共屬性,這個類中定義的方法可以被任何類的對象使用和繼承。繼承關(guān)系具有傳遞性。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心28/35繼承方法功能getClass()獲取當(dāng)前對象所屬的類的信息,返回Class對象。toString()按字符串對象返回當(dāng)前對象本身的有關(guān)信息。equals(Objectobj)比較當(dāng)前對象和obj對象是否為同一個對象,是返回true。clone()生成當(dāng)前對象的一個副本,并返回這個對象的副本對象2024/12/24李飛——東北大學(xué)秦皇島分校計算中心29/35和繼承相關(guān)的保留字This:指代當(dāng)前類。在構(gòu)造方法和成員方法中,this用來表示引用當(dāng)前對象,也就是被調(diào)用的方法或構(gòu)造方法所屬的對象和類。通過使用this保留字,可以在方法中引用當(dāng)前類和當(dāng)前對象的任何成員。Super:指代當(dāng)前類的父類如果定義的類是某個類的子類,且在類定義中重寫了一些與其父類相同名稱的方法。且在當(dāng)前類的定義中,需要使用父類的同名方法或成員變量。就需要使用super保留字來進(jìn)行引用2024/12/24李飛——東北大學(xué)秦皇島分校計算中心30/35例5.6:this保留字的使用。
2024/12/24李飛——東北大學(xué)秦皇島分校計算中心31/35publicclasseg5_6{ doubler=0,a=0,b=0,s=0; publiceg5_6(doubler){ this.r=r; s=Math.PI*r; } publiceg5_6(doublea,doubleb){ this.a=a; this.b=b; s=a*b;
}publiceg5_6(){this(4,5);
} publicdoublegetS(){ returnthis.s; } publicstaticvoidmain(String[]args){ eg5_6eg1=neweg5_6(3); eg5_6eg2=neweg5_6(3,4); eg5_6eg3=neweg5_6(); System.out.println(eg1.getS()); System.out.println(eg2.getS()); System.out.println(eg3.getS()); }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心32/35例5.7:super保留字的使用。publicclasseg5_7extendseg5_6{ doubletriangle=0; publiceg5_7(){ super(); triangle=super.getS()/2; } publiceg5_7(doublea,doubleb){ super(a,b); triangle=super.getS()/2; } publicstaticvoidmain(String[]args){ eg5_7eg1=neweg5_7(); eg5_7eg2=neweg5_7(3,4); System.out.println(eg1.triangle); System.out.println(eg2.triangle); }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心33/355.4特別的類抽象類抽象類是用來表示抽象概念的類,它不可被實(shí)例化。內(nèi)部類在Java中,定義一個類成為另外的類的成員。這種在類中定義的類稱為內(nèi)部類。嵌套類:靜態(tài)(用Static定義)的內(nèi)部類。最終類:用final定義的類匿名類:沒有名字的類2024/12/24李飛——東北大學(xué)秦皇島分校計算中心34/35抽象類抽象類的定義方法抽象方法:是指用abstract修飾的僅有方法聲明,沒有實(shí)現(xiàn)方法體的方法。如定義一個求面積的抽象方法getS()publicabstractdoublegetS();//抽象方法輸出面積2024/12/24李飛——東北大學(xué)秦皇島分校計算中心35/35abstractclass抽象類名{……成員方法;抽象方法;}內(nèi)部類和嵌套類內(nèi)部類可以像成員變量或成員方法一樣訪問其外部類的成員變量和方法。內(nèi)部類的實(shí)例對象通常只能在其外部類的范圍內(nèi)使用。當(dāng)內(nèi)部類被Static定義時,可以通過“外部類名.內(nèi)部類名”的形式調(diào)用。例5.9,例5.102024/12/24李飛——東北大學(xué)秦皇島分校計算中心36/35最終類最終類的定義格式finalclass最終類類名{……}最終類不可被繼承。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心37/35匿名類當(dāng)我們在一個類中定義的內(nèi)部類僅使用一次時,我們可以把類的定義和實(shí)例化的語句結(jié)合在一起書寫。由于通過這種方法定義的類僅實(shí)例化一次,就不需要為實(shí)例命名,因此定義的內(nèi)部類也就沒有名稱。這種沒有名字的內(nèi)部類被稱為匿名類。匿名類通常將類的描述寫在一個語句或表達(dá)式中。這樣的語句有兩重含義,一是定義一個匿名類,二是創(chuàng)建了一個該類的對象。例5.122024/12/24李飛——東北大學(xué)秦皇島分校計算中心38/355.5接口定義接口就是一系列常量和方法協(xié)議的集合,它提供了多個類共同行為的界面,但不限制每個類如何實(shí)現(xiàn)這些方法。特點(diǎn)只有常量和方法協(xié)議。不可被實(shí)例化為對象??杀欢嘀乩^承。只有在其子類中把所有方法都重寫后,才可對該子類實(shí)例化.2024/12/24李飛——東北大學(xué)秦皇島分校計算中心39/35接口的定義[接口修飾符]interface接口名稱[extends父接口名]{靜態(tài)常量方法原型說明}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心40/35接口修飾符:public,不寫默認(rèn)public接口的實(shí)現(xiàn)publicclass類名implement
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)一年級20以內(nèi)連加連減口算練習(xí)題1080道非常好
- 《現(xiàn)代農(nóng)業(yè)綠色食品》課件
- 《項目融資b》課件
- 《烴的燃燒規(guī)律總結(jié)》課件
- 如何預(yù)防兒童齲齒
- 《胸腔引流導(dǎo)管》課件
- 園林綠化行業(yè)客服工作心得
- 電子工程師電子設(shè)備設(shè)計與調(diào)試
- 旅游景點(diǎn)保安工作總結(jié)
- 《紅細(xì)胞與貧血》課件
- 腫瘤科醫(yī)院感染管理制度
- 產(chǎn)品拆解:飛書多維表格怎么用
- 意識障礙的診斷鑒別診斷及處理
- 客房服務(wù)員(四級)考證理論考核試題及答案
- 英語演講知到章節(jié)答案智慧樹2023年哈爾濱工程大學(xué)
- 商務(wù)禮儀培訓(xùn)職業(yè)禮儀員工培訓(xùn)PPT
- 圍手術(shù)期手術(shù)部位感染預(yù)防與控制措施試題及答案
- 本田品質(zhì)管理基礎(chǔ)課程(課堂PPT)
- 教育科學(xué)研究方法(第二版) 單元1 主題6 熟悉本學(xué)科著名的辦學(xué)機(jī)構(gòu)
- JC∕T 2647-2021 預(yù)拌混凝土生產(chǎn)企業(yè)廢水回收利用規(guī)范
- 三星公司供應(yīng)鏈管理流程綜合分析報告
評論
0/150
提交評論