![Java基礎(chǔ)第3講面向?qū)ο蟪绦蛟O(shè)計(課時2)課件_第1頁](http://file4.renrendoc.com/view/42ec230d151f6f985c7391662aebbbd2/42ec230d151f6f985c7391662aebbbd21.gif)
![Java基礎(chǔ)第3講面向?qū)ο蟪绦蛟O(shè)計(課時2)課件_第2頁](http://file4.renrendoc.com/view/42ec230d151f6f985c7391662aebbbd2/42ec230d151f6f985c7391662aebbbd22.gif)
![Java基礎(chǔ)第3講面向?qū)ο蟪绦蛟O(shè)計(課時2)課件_第3頁](http://file4.renrendoc.com/view/42ec230d151f6f985c7391662aebbbd2/42ec230d151f6f985c7391662aebbbd23.gif)
![Java基礎(chǔ)第3講面向?qū)ο蟪绦蛟O(shè)計(課時2)課件_第4頁](http://file4.renrendoc.com/view/42ec230d151f6f985c7391662aebbbd2/42ec230d151f6f985c7391662aebbbd24.gif)
![Java基礎(chǔ)第3講面向?qū)ο蟪绦蛟O(shè)計(課時2)課件_第5頁](http://file4.renrendoc.com/view/42ec230d151f6f985c7391662aebbbd2/42ec230d151f6f985c7391662aebbbd25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第三講
面向?qū)ο蟪绦蛟O(shè)計---主講:鄧永生Java程序設(shè)計第三講面向?qū)ο蟪绦蛟O(shè)計---主講:鄧永生Java程序1主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁⒚嫦驅(qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?一、從日常生活中看對象-類和對象類在面向?qū)ο蟮某绦蛟O(shè)計中,類是程序的基本單元。類實例化就成為對象。類的實例化指的是創(chuàng)建該類的對象.類的作用就象一個模板,所有對象(實例)依照它來創(chuàng)建。繼承多態(tài)類對象抽象實例化封裝的實體=數(shù)據(jù)+方法行為屬性方法變量一、從日常生活中看對象-類和對象類在面向?qū)ο蟮某绦蛟O(shè)計中,類3一、從日常生活中看對象-成員類是的一種重要的復(fù)合數(shù)據(jù)類型?;緮?shù)據(jù)類型:整型,實型(浮點型),布爾型,字符型復(fù)合數(shù)據(jù)類型:類,接口下面看看數(shù)據(jù)抽象的一個例子——小汽車類class小汽車{int顏色;int車門個數(shù);int極限速度;
void剎車(){…};void加速(){…};void減速(){…};}
計算機中的對象的原型
現(xiàn)實生活一、從日常生活中看對象-成員類是的一種重要的復(fù)合數(shù)據(jù)類型。c4一、從日常生活中看對象-封裝封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù),實際上是使用對象A對象B方法將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。數(shù)據(jù)方法方法私有數(shù)據(jù)公有數(shù)據(jù)一、從日常生活中看對象-封裝封裝把對象的所有組成部分組合在一5一、從日常生活中看對象-繼承繼承最主要的目的是為了“擴展”原類的功能、加強或改進原類所沒有定義的屬性和方法狗+顏色+叫()圣伯納+雪地救人()博美+叫()+玩球()自行車(父類)山地車賽車雙人車子類一、從日常生活中看對象-繼承繼承最主要的目的是為了“擴展”原6一、從日常生活中看對象-多態(tài)一個名詞有多種語義,一個方法多種功能.參數(shù)表不同----方法的重載類派生過程中,重新改寫父類的方法----覆蓋publicdoublearea(doubler)publicdoublearea(doublea,doubleb)publicdoublearea(doublea,doubleb,doublec)3.02.0,3.03.0,4.0,5.0例如:聲明三個同名方法area求圓、矩形、和三角形的面積類一、從日常生活中看對象-多態(tài)一個名詞有多種語義,一個方法多種7主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁⒚嫦驅(qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?二、面向?qū)ο蟾拍睿侯惻c對象我們經(jīng)常說:物以類聚,人以群分。它反映了人們對客觀事物分類管理的思想,要想分門別類地管理好各種事物,必然存在著對客觀事物的最基本的認(rèn)識,對同一種事物要有明顯的劃分依據(jù),也就是要描述清楚同一種事物共同的基本外觀特征(屬性)及共同的行為能力(方法)。這個過程可以通過觀察、歸納、總結(jié)等方式得到對客觀事物的共性描述,顯然,這是一個把客觀事物映象到人腦1、類二、面向?qū)ο蟾拍睿侯惻c對象我們經(jīng)常說:物以類聚,人以群分。9二、面向?qū)ο蟾拍睿侯惻c對象對象就是類所描述的同種事物中實實在在的一個個體。在程序中,當(dāng)一個對象產(chǎn)生之后就意味著它具有了生命特征,程序中的對象是類的一個實例。2、對象中形成思想認(rèn)識的抽象思維過程。所以類是對同一種事物(包括外觀世界客觀存在的、抽象的、有生命的、無生命的)所具有的共性描述,這里的共性包括事物本身的屬性特征和基本行為特征。
類本身并沒有生命特征,它僅僅是一個針對事物的共性描述,通常以文件的形式保存在各種存儲介質(zhì)上。
在程序中,類以特定的方式(new)被調(diào)入到內(nèi)存中使用,此時存在于內(nèi)存中的這段類代碼就叫做對象,顯然,對象與類的代碼本質(zhì)上是完全相同的,只是存儲介質(zhì)不同而已,而且對對象而言,它具有了生命特征(在內(nèi)存中的生存周期)。更重要的是,在同一個程序中,類可以被多次調(diào)入內(nèi)存形成多個相同的對象,對象之間用不同的對象變量命名得以區(qū)分。二、面向?qū)ο蟾拍睿侯惻c對象對象就是類所描述的同種事物中實實在103、類與對象間的關(guān)系二、面向?qū)ο蟾拍睿侯惻c對象對象類實例化抽象3、類與對象間的關(guān)系二、面向?qū)ο蟾拍睿侯惻c對象對象類實例化抽11主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁?、面向?qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?2三、類的定義語法如下:[修飾字]class
類名
[extends父類名][implements接口列表]{
類體
}1)、創(chuàng)建類的關(guān)鍵字是“class”2)、類以文件的形式保存在硬盤3)、類的名字必須和文件名相同4)、定義類的類型的關(guān)鍵字有3個:
public、abstract、final5)、類的構(gòu)造器的名字必須和類名相同6)、方法申明或定義1、定義類成員變量和成員方法。實例實例三、類的定義語法如下:1、定義類成員變量和成員方法。實例實例13三、類的定義1)、在一個類中與類同名的方法叫構(gòu)造方法,系統(tǒng)在產(chǎn)生對象時會自動執(zhí)行2)、構(gòu)造方法通常用于定義一些初值或其他準(zhǔn)備工作3)、一個類可以有多個構(gòu)造函數(shù)
(重載),根據(jù)參數(shù)的不同決定執(zhí)行哪一個4)、如果程序中沒有定義構(gòu)造方法,則創(chuàng)造實例時使用的是缺省方法,它是一個無內(nèi)容的空方法2、構(gòu)造方法:是提供對象初始化的專用方法,不能被顯示地直接調(diào)用。與類同名而不是與java文件同名。實例三、類的定義1)、在一個類中與類同名的方法叫構(gòu)造方法,系統(tǒng)在14三、類的定義聲明成員方法的格式為:[<修飾符>][static]<返回值類型><方法名>([<參數(shù)列表>]){
[<方法體>]
}
其中,〈修飾符〉和成員變量的修飾符一樣,含義也相同。例如:
public
void
SetDate(int
y,
int
m,
int
d){...}3、聲明或定義類的方法定義在所有方法之外的變量是類的成員變量,定義在方法之內(nèi)的變量是普通變量。三、類的定義聲明成員方法的格式為:3、聲明或定義類的方法定義15super指這個對象的父類super()用來調(diào)用父類中的方法及變量數(shù)據(jù)
publicclass
apple
extends
fruits{
publicapple(intprice){
super(price);}
}
以上句子表示使用超類的構(gòu)造函數(shù)生成實例。super必須是子類構(gòu)造器的第一條語句。三、類的定義4、super與this1)、super還可用super.
調(diào)用父類中被隱藏的成員變量和方法。實例super指這個對象的父類三、類的定義4、super與thi16三、類的定義2)、thisthis
指對象自己this
的作用主要是在當(dāng)前對象中引用自己。如:要將對象自己當(dāng)作參數(shù),傳送給別的對象中的方法。class
ThisClass{
publicstaticvoidmain(
){
Bankbank=newBank(
);
bank.someMethod(this);}}classCircle{
intr;Circle(int
r){
this.r=r;}public
area(
){
return
r*r*3;}}實例實例
this指向當(dāng)前類的實例本身。靜態(tài)方法不能使用this關(guān)鍵字,因為靜態(tài)方法不屬于當(dāng)前類的實例,所以this也就沒有什么東西去指向。構(gòu)造器的this可以指向同一個類中不同參數(shù)列表的另外一個構(gòu)造器。三、類的定義2)、thisthis指對象自己class17主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁⒚嫦驅(qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?8四、面向?qū)ο蟮幕咎卣髅嫦驅(qū)ο蟮娜蠡咎卣魇牵豪^承、封裝、多態(tài)。1、繼承(inherit)
繼承是通過extends讓某個類型的對象獲得另一個類型的對象的特性的方法。
例如布谷鳥屬于飛鳥類,也屬于鳥類。可見,子類都具有父類的公共特性。子類不能繼承父類中訪問權(quán)限為private的成員變量和方法;Java不支持多重繼承,即一個類從多個超類派生的能力。實例
繼承機制使得新類不僅有自己特有的成員變量和方法,而且通常是擁有被繼承類(超類)的全部成員變量和方法。
要繼承就得創(chuàng)建子類,創(chuàng)建子類語法:[<修飾符>]class<子類名>extends<父類名>{...}四、面向?qū)ο蟮幕咎卣髅嫦驅(qū)ο蟮娜蠡咎卣魇牵豪^承、封裝、19四、面向?qū)ο蟮幕咎卣?、封裝(encapsulation)訪問控制符是Java語言控制對方法和變量訪問的修飾符。對象是對一組變量和相關(guān)方法的封裝,其中變量表明了對象的狀態(tài),方法表明了對象具有的行為。通過對象的封裝,實現(xiàn)了模塊化和信息隱藏;通過對類的成員施以一定的訪問權(quán)限,實現(xiàn)了類中成員的信息隱藏。
private、default、protected、public實例實例四、面向?qū)ο蟮幕咎卣?、封裝(encapsulation)20四、面向?qū)ο蟮幕咎卣麝P(guān)于變量和方法的訪問權(quán)限修飾字:
public、protected、private1)、public:
任何其它類、對象只要可以看到這個類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。2)、protected:
在同一類,同一包可以使用。不同包的類要使用這種變量和方法,必須是該類的子類才可以存取變量或調(diào)用方法。3)、private:不允許任何其他類存取和調(diào)用。四、面向?qū)ο蟮幕咎卣麝P(guān)于變量和方法的訪問權(quán)限修飾字:21四、面向?qū)ο蟮幕咎卣?)、finalfinal
方法之前,允許繼承防止覆蓋此方法final
類之前,標(biāo)是該類不能被繼承final
變量之前,定義一個常量靜態(tài)變量(類變量),聲明為static的變量實質(zhì)上就是全局變量。當(dāng)聲明一個對象時,并不產(chǎn)生static變量的拷貝,而是該類所有的實例變量共用同一個static變量。聲明為static的方法有以下幾條限制:它們僅能調(diào)用其他的static方法;它們只能訪問static數(shù)據(jù);它們不能以任何方式引用this或super。5)、static
注意:在一個static方法中引用任何實例變量都是非法的。如果一個成員(屬性或方法)被聲明為static,它就能夠在它的類的任何對象創(chuàng)建之前被訪問,而不必引用任何對象。通常屬于類的公共屬性說明成static。四、面向?qū)ο蟮幕咎卣?)、finalfinal方法之前,22四、面向?qū)ο蟮幕咎卣鞒蓡T的可視性描述publicprotected缺省privateyesyesyesyesyesyesyesyesnoyes*nonoyesnonono同一類中同一包中不同包的子類中非子類也不同包修飾符訪問規(guī)則:public,
private,
protected,
default。四、面向?qū)ο蟮幕咎卣鞒蓡T的可視性描述publicpr23四、面向?qū)ο蟮幕咎卣?、多態(tài)(Polymorphism)在Java語言中,多態(tài)性體現(xiàn)在兩個方面:由方法重載實現(xiàn)的靜態(tài)多態(tài)性(編譯時多態(tài))和方法覆蓋實現(xiàn)的動態(tài)多態(tài)性(運行時多態(tài))。
1)、編譯時多態(tài):在編譯階段,編譯器會根據(jù)參數(shù)的不同來靜態(tài)確定調(diào)用相應(yīng)的方法,即具體調(diào)用哪個被重載的方法。2)、運行時多態(tài):由于子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調(diào)用子類的方法。實例實例實例實例
子孫類中定義的方法和祖先類中某個方法同名、同參數(shù),則祖先類中的該方法被覆蓋(overriding)。實例實例
同一個類中多個方法用相同的名稱,但參數(shù)不同時叫方法重載(overloading)。參數(shù)不同是指參數(shù)個數(shù)不同或參數(shù)個數(shù)相同時參數(shù)的對應(yīng)位置的數(shù)據(jù)類型不同。四、面向?qū)ο蟮幕咎卣?、多態(tài)(Polymorphism)在24消息就是一個對象向另一個對象發(fā)出的服務(wù)請求,它應(yīng)該包含下述信息:提供服務(wù)的對象標(biāo)識、服務(wù)標(biāo)識、輸入信息和應(yīng)答信息。服務(wù)通常被稱為方法或函數(shù)。
void
與return四、面向?qū)ο蟮幕咎卣?、消息傳遞實例
消息傳遞的四個要素:消息接收對象、接收對象中哪個方法完成指定動作、此方法需要的參數(shù)、此方法是否有返回消息。消息就是一個對象向另一個對象發(fā)出的服務(wù)請求,它應(yīng)該包含下述信25主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁⒚嫦驅(qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?6五、抽象類、接口實例抽象類是在定義類時用abstract
修飾的類,用abstract
修飾的方法叫抽象方法。一個類中如果有抽象方法,那它一定屬于抽象類。抽象類不能夠直接用new創(chuàng)建相應(yīng)的對象,也就是它不能夠被實例化,必須通過繼承產(chǎn)生子類,再通過子類得到對象。在抽象類中如果有抽象方法,一定要在子類中實現(xiàn)抽象類中的抽象方法。1、抽象類實例五、抽象類、接口實例抽象類是在定義類時用abstract27五、抽象類、接口2、接口Java語言只支持單繼承機制,不支持多繼承。接口和抽象類非常相似,都是只定義了類中的方法,沒有給出方法的具體實現(xiàn)。Java語言不僅規(guī)定一個子類只能直接繼承自一個父類,同時允許一個子類可以實現(xiàn)多個接口。所以,從本質(zhì)上講,Java語言是借助于接口來實現(xiàn)C++的多繼承機制的。五、抽象類、接口2、接口Java語言只支持單繼承機制,不支持28五、抽象類、接口1)、定義接口接口的定義格式:
〈修飾符〉interface〈接口名〉{...}
〈修飾符〉可以是public,也可以缺省。當(dāng)為缺省時,接口只能被與它處在同一包中的方法訪問;當(dāng)聲明為public時,接口能被任何類的方法訪問。
例如:
public
interface
PrintMessage{...}五、抽象類、接口1)、定義接口接口的定義格式:29五、抽象類、接口說明:①接口中定義的所有成員變量都必須設(shè)置初值②若接口定義為默認(rèn)型訪問權(quán)限,則接口中的成員變量全部隱含為finalstatic型。這意味著它們不能被實現(xiàn)接口方法的類改變,并且為默認(rèn)訪問權(quán)限③當(dāng)接口保存于文件時,其文件命名方法和保存類的文件命名方法類同④一個文件可以包含若干個接口,但最多只能有一個接口定義為public,其他的接口必須為默認(rèn)⑤類必須實現(xiàn)定義在接口中的所有方法五、抽象類、接口說明:①接口中定義的所有成員變量都必須設(shè)置初30五、抽象類、接口2)、接口與抽象類的區(qū)別⑥定義類時實現(xiàn)接口用關(guān)鍵字
implements,一個類只能繼承一個父類,但可以實現(xiàn)若干個接口⑦接口中的成員變量只能用public、static和final來定義,如果不聲明,則默認(rèn)為publicstaticfinal。類定義的完整格式是:[<修飾符>]
class<類名>[extends<父類名>]
[implements<接口名1>,<接口名2>,...]實例實例五、抽象類、接口2)、接口與抽象類的區(qū)別⑥定義類時實現(xiàn)接口用31主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁⒚嫦驅(qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?2六、面向?qū)ο笤O(shè)計原則面向?qū)ο笤O(shè)計原則三大基本原則:
1、針對接口編程,而不是針對實現(xiàn)編程
2、優(yōu)先使用對象組合,而不是類繼承
3、封裝變化點就一個類而言,應(yīng)該僅有一個引起它變化的原因。軟件設(shè)計真正要做的許多內(nèi)容,就是發(fā)現(xiàn)職責(zé)并把那些職責(zé)相互分離。測試驅(qū)動的開發(fā)實踐常常會在設(shè)計出現(xiàn)臭味之前就迫使我們分離職責(zé)。(1)、單一職責(zé)原則(SRP)六、面向?qū)ο笤O(shè)計原則面向?qū)ο笤O(shè)計原則三大基本原則:1、針對33六、面向?qū)ο笤O(shè)計原則軟件實體(類、模塊、函數(shù)/方法)應(yīng)該是可擴展的,但不應(yīng)該是可修改的。也就是說:對于擴展是開放的,對于更改是封閉的。(2)、開閉原則(OCP)子類應(yīng)當(dāng)可以替換父類并出現(xiàn)在父類能夠出現(xiàn)的任何地方。(3)、替換原則(LSP)①、高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象。
②、抽象不應(yīng)該依賴于細(xì)節(jié),而細(xì)節(jié)應(yīng)該依賴于抽象。(4)、依賴倒置原則(DIP)
在進行業(yè)務(wù)設(shè)計時,與特定業(yè)務(wù)有關(guān)的依賴關(guān)系應(yīng)該盡量依賴接口和抽象類,而不是依賴于具體類。具體類只負(fù)責(zé)相關(guān)業(yè)務(wù)的實現(xiàn),修改具體類不影響與特定業(yè)務(wù)有關(guān)的依賴關(guān)系。六、面向?qū)ο笤O(shè)計原則軟件實體(類、模塊、函數(shù)/方法)應(yīng)該是可34六、面向?qū)ο笤O(shè)計原則采用多個與特定客戶類有關(guān)的接口比采用一個通用的涵蓋多個業(yè)務(wù)方法的接口要好。(5)、接口分離原則(ISP)六、面向?qū)ο笤O(shè)計原則采用多個與特定客戶類有關(guān)的接口比采用一個35主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁?、面向?qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?6七、小結(jié)1、類是Java面向?qū)ο缶幊痰幕驹?,它定義了一個對象的結(jié)構(gòu)和功能2、構(gòu)造方法3、類繼承,this和super4、類變量(static類型)、方法和實例變量、方法5、方法覆蓋和重載、抽象類與接口6、面向?qū)ο筇匦?、面向?qū)ο笤O(shè)計原則七、小結(jié)1、類是Java面向?qū)ο缶幊痰幕驹兀x了一個37七、小結(jié)8、本講還學(xué)習(xí)了如下關(guān)鍵字:public、protected、private、extends、abstract、interface、implements、static、final、super、this、void、class、return。七、小結(jié)8、本講還學(xué)習(xí)了如下關(guān)鍵字:public、prote38主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁?、面向?qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?9八、課程實訓(xùn)實訓(xùn)內(nèi)容:1、隨機生成30個1~200之間的整數(shù),并按由小到大的順序分別打印出所有的奇數(shù)和偶數(shù)。2、完成第一題的功能,但要求排序的功能由另一個類來完成。實訓(xùn)目標(biāo):八、課程實訓(xùn)實訓(xùn)內(nèi)容:1、隨機生成30個1~200之間的整數(shù)40第三講
面向?qū)ο蟪绦蛟O(shè)計---主講:鄧永生Java程序設(shè)計第三講面向?qū)ο蟪绦蛟O(shè)計---主講:鄧永生Java程序41主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁?、面向?qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?2一、從日常生活中看對象-類和對象類在面向?qū)ο蟮某绦蛟O(shè)計中,類是程序的基本單元。類實例化就成為對象。類的實例化指的是創(chuàng)建該類的對象.類的作用就象一個模板,所有對象(實例)依照它來創(chuàng)建。繼承多態(tài)類對象抽象實例化封裝的實體=數(shù)據(jù)+方法行為屬性方法變量一、從日常生活中看對象-類和對象類在面向?qū)ο蟮某绦蛟O(shè)計中,類43一、從日常生活中看對象-成員類是的一種重要的復(fù)合數(shù)據(jù)類型。基本數(shù)據(jù)類型:整型,實型(浮點型),布爾型,字符型復(fù)合數(shù)據(jù)類型:類,接口下面看看數(shù)據(jù)抽象的一個例子——小汽車類class小汽車{int顏色;int車門個數(shù);int極限速度;
void剎車(){…};void加速(){…};void減速(){…};}
計算機中的對象的原型
現(xiàn)實生活一、從日常生活中看對象-成員類是的一種重要的復(fù)合數(shù)據(jù)類型。c44一、從日常生活中看對象-封裝封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù),實際上是使用對象A對象B方法將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。數(shù)據(jù)方法方法私有數(shù)據(jù)公有數(shù)據(jù)一、從日常生活中看對象-封裝封裝把對象的所有組成部分組合在一45一、從日常生活中看對象-繼承繼承最主要的目的是為了“擴展”原類的功能、加強或改進原類所沒有定義的屬性和方法狗+顏色+叫()圣伯納+雪地救人()博美+叫()+玩球()自行車(父類)山地車賽車雙人車子類一、從日常生活中看對象-繼承繼承最主要的目的是為了“擴展”原46一、從日常生活中看對象-多態(tài)一個名詞有多種語義,一個方法多種功能.參數(shù)表不同----方法的重載類派生過程中,重新改寫父類的方法----覆蓋publicdoublearea(doubler)publicdoublearea(doublea,doubleb)publicdoublearea(doublea,doubleb,doublec)3.02.0,3.03.0,4.0,5.0例如:聲明三個同名方法area求圓、矩形、和三角形的面積類一、從日常生活中看對象-多態(tài)一個名詞有多種語義,一個方法多種47主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁?、面向?qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?8二、面向?qū)ο蟾拍睿侯惻c對象我們經(jīng)常說:物以類聚,人以群分。它反映了人們對客觀事物分類管理的思想,要想分門別類地管理好各種事物,必然存在著對客觀事物的最基本的認(rèn)識,對同一種事物要有明顯的劃分依據(jù),也就是要描述清楚同一種事物共同的基本外觀特征(屬性)及共同的行為能力(方法)。這個過程可以通過觀察、歸納、總結(jié)等方式得到對客觀事物的共性描述,顯然,這是一個把客觀事物映象到人腦1、類二、面向?qū)ο蟾拍睿侯惻c對象我們經(jīng)常說:物以類聚,人以群分。49二、面向?qū)ο蟾拍睿侯惻c對象對象就是類所描述的同種事物中實實在在的一個個體。在程序中,當(dāng)一個對象產(chǎn)生之后就意味著它具有了生命特征,程序中的對象是類的一個實例。2、對象中形成思想認(rèn)識的抽象思維過程。所以類是對同一種事物(包括外觀世界客觀存在的、抽象的、有生命的、無生命的)所具有的共性描述,這里的共性包括事物本身的屬性特征和基本行為特征。
類本身并沒有生命特征,它僅僅是一個針對事物的共性描述,通常以文件的形式保存在各種存儲介質(zhì)上。
在程序中,類以特定的方式(new)被調(diào)入到內(nèi)存中使用,此時存在于內(nèi)存中的這段類代碼就叫做對象,顯然,對象與類的代碼本質(zhì)上是完全相同的,只是存儲介質(zhì)不同而已,而且對對象而言,它具有了生命特征(在內(nèi)存中的生存周期)。更重要的是,在同一個程序中,類可以被多次調(diào)入內(nèi)存形成多個相同的對象,對象之間用不同的對象變量命名得以區(qū)分。二、面向?qū)ο蟾拍睿侯惻c對象對象就是類所描述的同種事物中實實在503、類與對象間的關(guān)系二、面向?qū)ο蟾拍睿侯惻c對象對象類實例化抽象3、類與對象間的關(guān)系二、面向?qū)ο蟾拍睿侯惻c對象對象類實例化抽51主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁?、面向?qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?2三、類的定義語法如下:[修飾字]class
類名
[extends父類名][implements接口列表]{
類體
}1)、創(chuàng)建類的關(guān)鍵字是“class”2)、類以文件的形式保存在硬盤3)、類的名字必須和文件名相同4)、定義類的類型的關(guān)鍵字有3個:
public、abstract、final5)、類的構(gòu)造器的名字必須和類名相同6)、方法申明或定義1、定義類成員變量和成員方法。實例實例三、類的定義語法如下:1、定義類成員變量和成員方法。實例實例53三、類的定義1)、在一個類中與類同名的方法叫構(gòu)造方法,系統(tǒng)在產(chǎn)生對象時會自動執(zhí)行2)、構(gòu)造方法通常用于定義一些初值或其他準(zhǔn)備工作3)、一個類可以有多個構(gòu)造函數(shù)
(重載),根據(jù)參數(shù)的不同決定執(zhí)行哪一個4)、如果程序中沒有定義構(gòu)造方法,則創(chuàng)造實例時使用的是缺省方法,它是一個無內(nèi)容的空方法2、構(gòu)造方法:是提供對象初始化的專用方法,不能被顯示地直接調(diào)用。與類同名而不是與java文件同名。實例三、類的定義1)、在一個類中與類同名的方法叫構(gòu)造方法,系統(tǒng)在54三、類的定義聲明成員方法的格式為:[<修飾符>][static]<返回值類型><方法名>([<參數(shù)列表>]){
[<方法體>]
}
其中,〈修飾符〉和成員變量的修飾符一樣,含義也相同。例如:
public
void
SetDate(int
y,
int
m,
int
d){...}3、聲明或定義類的方法定義在所有方法之外的變量是類的成員變量,定義在方法之內(nèi)的變量是普通變量。三、類的定義聲明成員方法的格式為:3、聲明或定義類的方法定義55super指這個對象的父類super()用來調(diào)用父類中的方法及變量數(shù)據(jù)
publicclass
apple
extends
fruits{
publicapple(intprice){
super(price);}
}
以上句子表示使用超類的構(gòu)造函數(shù)生成實例。super必須是子類構(gòu)造器的第一條語句。三、類的定義4、super與this1)、super還可用super.
調(diào)用父類中被隱藏的成員變量和方法。實例super指這個對象的父類三、類的定義4、super與thi56三、類的定義2)、thisthis
指對象自己this
的作用主要是在當(dāng)前對象中引用自己。如:要將對象自己當(dāng)作參數(shù),傳送給別的對象中的方法。class
ThisClass{
publicstaticvoidmain(
){
Bankbank=newBank(
);
bank.someMethod(this);}}classCircle{
intr;Circle(int
r){
this.r=r;}public
area(
){
return
r*r*3;}}實例實例
this指向當(dāng)前類的實例本身。靜態(tài)方法不能使用this關(guān)鍵字,因為靜態(tài)方法不屬于當(dāng)前類的實例,所以this也就沒有什么東西去指向。構(gòu)造器的this可以指向同一個類中不同參數(shù)列表的另外一個構(gòu)造器。三、類的定義2)、thisthis指對象自己class57主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁⒚嫦驅(qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?8四、面向?qū)ο蟮幕咎卣髅嫦驅(qū)ο蟮娜蠡咎卣魇牵豪^承、封裝、多態(tài)。1、繼承(inherit)
繼承是通過extends讓某個類型的對象獲得另一個類型的對象的特性的方法。
例如布谷鳥屬于飛鳥類,也屬于鳥類。可見,子類都具有父類的公共特性。子類不能繼承父類中訪問權(quán)限為private的成員變量和方法;Java不支持多重繼承,即一個類從多個超類派生的能力。實例
繼承機制使得新類不僅有自己特有的成員變量和方法,而且通常是擁有被繼承類(超類)的全部成員變量和方法。
要繼承就得創(chuàng)建子類,創(chuàng)建子類語法:[<修飾符>]class<子類名>extends<父類名>{...}四、面向?qū)ο蟮幕咎卣髅嫦驅(qū)ο蟮娜蠡咎卣魇牵豪^承、封裝、59四、面向?qū)ο蟮幕咎卣?、封裝(encapsulation)訪問控制符是Java語言控制對方法和變量訪問的修飾符。對象是對一組變量和相關(guān)方法的封裝,其中變量表明了對象的狀態(tài),方法表明了對象具有的行為。通過對象的封裝,實現(xiàn)了模塊化和信息隱藏;通過對類的成員施以一定的訪問權(quán)限,實現(xiàn)了類中成員的信息隱藏。
private、default、protected、public實例實例四、面向?qū)ο蟮幕咎卣?、封裝(encapsulation)60四、面向?qū)ο蟮幕咎卣麝P(guān)于變量和方法的訪問權(quán)限修飾字:
public、protected、private1)、public:
任何其它類、對象只要可以看到這個類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。2)、protected:
在同一類,同一包可以使用。不同包的類要使用這種變量和方法,必須是該類的子類才可以存取變量或調(diào)用方法。3)、private:不允許任何其他類存取和調(diào)用。四、面向?qū)ο蟮幕咎卣麝P(guān)于變量和方法的訪問權(quán)限修飾字:61四、面向?qū)ο蟮幕咎卣?)、finalfinal
方法之前,允許繼承防止覆蓋此方法final
類之前,標(biāo)是該類不能被繼承final
變量之前,定義一個常量靜態(tài)變量(類變量),聲明為static的變量實質(zhì)上就是全局變量。當(dāng)聲明一個對象時,并不產(chǎn)生static變量的拷貝,而是該類所有的實例變量共用同一個static變量。聲明為static的方法有以下幾條限制:它們僅能調(diào)用其他的static方法;它們只能訪問static數(shù)據(jù);它們不能以任何方式引用this或super。5)、static
注意:在一個static方法中引用任何實例變量都是非法的。如果一個成員(屬性或方法)被聲明為static,它就能夠在它的類的任何對象創(chuàng)建之前被訪問,而不必引用任何對象。通常屬于類的公共屬性說明成static。四、面向?qū)ο蟮幕咎卣?)、finalfinal方法之前,62四、面向?qū)ο蟮幕咎卣鞒蓡T的可視性描述publicprotected缺省privateyesyesyesyesyesyesyesyesnoyes*nonoyesnonono同一類中同一包中不同包的子類中非子類也不同包修飾符訪問規(guī)則:public,
private,
protected,
default。四、面向?qū)ο蟮幕咎卣鞒蓡T的可視性描述publicpr63四、面向?qū)ο蟮幕咎卣?、多態(tài)(Polymorphism)在Java語言中,多態(tài)性體現(xiàn)在兩個方面:由方法重載實現(xiàn)的靜態(tài)多態(tài)性(編譯時多態(tài))和方法覆蓋實現(xiàn)的動態(tài)多態(tài)性(運行時多態(tài))。
1)、編譯時多態(tài):在編譯階段,編譯器會根據(jù)參數(shù)的不同來靜態(tài)確定調(diào)用相應(yīng)的方法,即具體調(diào)用哪個被重載的方法。2)、運行時多態(tài):由于子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調(diào)用子類的方法。實例實例實例實例
子孫類中定義的方法和祖先類中某個方法同名、同參數(shù),則祖先類中的該方法被覆蓋(overriding)。實例實例
同一個類中多個方法用相同的名稱,但參數(shù)不同時叫方法重載(overloading)。參數(shù)不同是指參數(shù)個數(shù)不同或參數(shù)個數(shù)相同時參數(shù)的對應(yīng)位置的數(shù)據(jù)類型不同。四、面向?qū)ο蟮幕咎卣?、多態(tài)(Polymorphism)在64消息就是一個對象向另一個對象發(fā)出的服務(wù)請求,它應(yīng)該包含下述信息:提供服務(wù)的對象標(biāo)識、服務(wù)標(biāo)識、輸入信息和應(yīng)答信息。服務(wù)通常被稱為方法或函數(shù)。
void
與return四、面向?qū)ο蟮幕咎卣?、消息傳遞實例
消息傳遞的四個要素:消息接收對象、接收對象中哪個方法完成指定動作、此方法需要的參數(shù)、此方法是否有返回消息。消息就是一個對象向另一個對象發(fā)出的服務(wù)請求,它應(yīng)該包含下述信65主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο蟮幕咎卣髁?、面向?qū)ο笤O(shè)計原則
七、小結(jié)八、課程實訓(xùn)五、抽象類、接口一、面向?qū)ο蟾拍睿侯惻c對象主要內(nèi)容二、面向?qū)ο蟾拍睿侯惻c對象三、類的定義四、面向?qū)ο?6五、抽象類、接口實例抽象類是在定義類時用abstract
修飾的類,用abstract
修飾的方法叫抽象方法。一個類中如果有抽象方法,那它一定屬于抽象類。抽象類不能夠直接用new創(chuàng)建相應(yīng)的對象,也就是它不能夠被實例化,必須通過繼承產(chǎn)生子類,再通過子類得到對象。在抽象類中如果有抽象方法,一定要在子類中實現(xiàn)抽象類中的抽象方法。1、抽象類實例五、抽象類、接口實例抽象類是在定義類時用abstract67五、抽象類、接口2、接口Java語言只支持單繼承機制,不支持多繼承。接口和抽象類非常相似,都是只定義了類中的方法,沒有給出方法的具體實現(xiàn)。Java語言不僅規(guī)定一個子類只能直接繼承自一個父類,同時允許一個子類可以實現(xiàn)多個接口。所以,從本質(zhì)上講,Java語言是借助于接口來實現(xiàn)C++的多繼承機制的。五、抽象類、接口2、接口Java語言只支持單繼承機制,不支持68五、抽象類、接口1)、定義接口接口的定義格式:
〈修飾符〉interface〈接口名〉{...}
〈修飾符〉可以是public,也可以缺省。當(dāng)為缺省時,接口只能被與它處在同一包中的方法訪問;當(dāng)聲明為public時,接口能被任何類的方法訪問。
例如:
public
interface
PrintMessage{...}五、抽象類、接口1)、定義接口接口的定義格式:69五、抽象類、接口說明:①接口中定義的所有成員變量都必須設(shè)置初值②若接口定義為默認(rèn)型訪問權(quán)限,則接口中的成員變量全部隱含為finalstatic型。這意味著它們不能被實現(xiàn)接口方法的類改變,并且為默認(rèn)訪問權(quán)限③當(dāng)接口保存于文件時,其文件命名方法和保存類的文件命名方法類同④一個文件可以包含若干個接口,但最多只能有一個接口定義為public,其他的接口必須為默認(rèn)⑤類必須實現(xiàn)定義在接口中的所有方法五、抽象類、接口說明:①接口中定義的所
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深信服智慧校園云機房解決方案
- 2025年山東省職教高考《語文》核心考點必刷必練試題庫(含答案)
- 《現(xiàn)代康旅產(chǎn)業(yè)概論》期末參考試題庫及答案
- 《工程招投標(biāo)與合同管理》參考試題庫(含答案)
- 2025年武夷山職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年新疆輕工職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025年晉中職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 部編版語文五年級下冊《快樂讀書吧》精美課件
- 滬教版(上海)七年級地理第一學(xué)期中國區(qū)域篇(上)1.3《青藏高原地區(qū)》聽課評課記錄
- 幼兒園中班秋季活動策劃方案五篇
- 2025版茅臺酒出口業(yè)務(wù)代理及銷售合同模板4篇
- 2025年N1叉車司機考試試題(附答案)
- 《醫(yī)院財務(wù)分析報告》課件
- 2024年考研政治試題及答案
- 2025年初級社會工作者綜合能力全國考試題庫(含答案)
- 2024年濰坊護理職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 《鉗工基本知識》課件
- 2022-2023學(xué)年五年級數(shù)學(xué)春季開學(xué)摸底考(四)蘇教版
- 【螞蟻?!?024中國商業(yè)醫(yī)療險發(fā)展研究藍(lán)皮書
- 授信審批部工作計劃及思路
- 財務(wù)管理學(xué)(第10版)課件 第3章 財務(wù)分析
評論
0/150
提交評論