




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
繼承第四章(上)方法重載應(yīng)遵循三大原則;適當(dāng)?shù)刂剌d構(gòu)造方法,可以使初始化對象的方式更為靈活;this引用總是指向調(diào)用成員方法的對象本身;靜態(tài)成員(包括靜態(tài)成員屬性和靜態(tài)成員方法)屬于類而不是屬于某個對象,可以在實例化對象之前通過類名訪問;使用package關(guān)鍵字打包;使用import關(guān)鍵字導(dǎo)入包或類?;仡櫛菊孪嚓P(guān)詞匯(藍(lán)色為關(guān)鍵字)單詞說明protected受保護(hù)的extends擴(kuò)充,擴(kuò)展super上一級的,超級的access訪問inheritance繼承,遺傳baseclass基類/父類derivedclass子類/派生類modifier修飾符本章目標(biāo)對象數(shù)組(補(bǔ)充)理解什么是繼承在Java中實現(xiàn)繼承,extends關(guān)鍵字4種訪問控制權(quán)限publicprotectedprivate缺省繼承中的構(gòu)造方法super關(guān)鍵字對象數(shù)組在Java中不但可以聲明由原始數(shù)據(jù)組成的數(shù)組,還可以聲明由對象組成的數(shù)組;聲明對象數(shù)組的方式如:但上述方式類似于C語言中的:
structStudent**p=NULL; p=(structStudent**)malloc(5*sizeof(structStudent*));
//只是聲明了一個指針數(shù)組,沒有任何實際的結(jié)構(gòu)體變量//假設(shè)已經(jīng)定義了一個Student類/*聲明由5個Student對象組成的數(shù)組*/Student[]stdAry=newStudent[5];對象數(shù)組==引用數(shù)組錯誤的理解方式學(xué)生對象的實例學(xué)生對象的實例學(xué)生對象的實例學(xué)生對象的實例學(xué)生對象的實例01234堆棧stdAry堆棧stdAry正確的理解方式對象的引用01234對象的引用對象的引用對象的引用對象的引用對象數(shù)組示例/*對象數(shù)組示例,假設(shè)已經(jīng)定義了Student類*/public
static
void
main(String[]args){
/*創(chuàng)建包含有5個Student引用的數(shù)組*/Student[]stdAry=newStudent[5];
/*逐一為每個引用創(chuàng)建對象實例*/stdAry[0]=newStudent("張三",18);stdAry[1]=newStudent("李四",20);stdAry[2]=newStudent("王五",24);stdAry[3]=newStudent("鄭六",21);stdAry[4]=newStudent("田七",19);
for(inti=0;i<stdAry.length;i++){
stdAry[i].display();}}對象數(shù)組的存放形式堆棧stdAry0123stdAry[0]stdAry[1]stdAry[2]stdAry[3]stdAry[4]4張三18李四20王五24鄭六21田七19面向?qū)ο蟮娜筇卣髅嫦驅(qū)ο蟮某绦蛟O(shè)計有三大特征:封裝:解決了數(shù)據(jù)的安全性問題繼承:解決了代碼的重用問題多態(tài):解決了程序的擴(kuò)展問題前面的章節(jié)我們已經(jīng)學(xué)習(xí)了有關(guān)于封裝的各個概念,這一章我們來討論第二大特征——繼承。繼承的概念在現(xiàn)實生活中的繼承,可以理解為兒子繼承了父親的財產(chǎn),即財產(chǎn)重用;面向?qū)ο蟪绦蛟O(shè)計中的繼承,則是代碼重用;繼承是利用現(xiàn)有的類創(chuàng)建新類的過程,現(xiàn)有的類稱作基類(或父類),創(chuàng)建的新類稱作派生類(子類)?;惙椒ê蛯傩耘缮惢惙椒?
附加方法大學(xué)系統(tǒng)人員分類樹人學(xué)生老師大學(xué)生研究生繼承的概念(續(xù))最高層是最普遍的、最一般的情況,往下每一層都比上一層更具體,并包含有高層的特征,通過這樣的層次結(jié)構(gòu)使下層的類能自動享用上層類的特點和性質(zhì);繼承其實就是自動地共享基類中成員屬性和成員方法的機(jī)制。在Java中實現(xiàn)繼承在Java中實現(xiàn)繼承需要使用到extends關(guān)鍵字;實現(xiàn)繼承的一般語法是:
[訪問修飾符]class
派生類名extends
基類名{
成員列表
}如:
classStudentextendsPerson { …… }實現(xiàn)繼承示例classPerson{//定義人類
publicStringmName;//姓名
public
int
mAge;//年齡
public
voiddining(){
System.out.println("吃飽了...");}//吃飯的方法}classStudentextendsPerson{//學(xué)生類繼承于人類
public
float
mGrade;//成績
public
voidexamination(){
System.out.println("考試及格了...");}//考試的方法}classTeacherextendsPerson{//教師類繼承于人類
public
float
mSalary;//薪水
public
void
prelection(){
System.out.println("上課很累...");}//上課的方法}public
class
InheritanceDemo{//該類用于容納main方法
public
static
void
main(String[]args){Studentstd=newStudent();//實例化學(xué)生對象
std.mName="張三";std.mAge=18;//為姓名和年齡賦值,訪問的是父類中的成員
std.dining();//調(diào)用吃飯的方法,訪問的是父類中的成員
std.examination();//調(diào)用考試方法,訪問的是子類中的成員
Teachertea=newTeacher();//實例化教師對象
tea.mName="譚浩強(qiáng)";tea.mAge=65;
tea.dining();
tea.prelection();}}繼承的作用當(dāng)今軟件設(shè)計的特征:軟件規(guī)模越來越大;軟件設(shè)計者越來越多;軟件設(shè)計分工越來越細(xì)。引入繼承,實現(xiàn)了代碼重用;引入繼承,實現(xiàn)了遞增式的程序設(shè)計。繼承的作用(續(xù))繼承是能自動傳播代碼和重用代碼的有力工具;繼承能夠在某些比較一般的類的基礎(chǔ)上建造、建立和擴(kuò)充新類;能減少代碼和數(shù)據(jù)的重復(fù)冗余度,并通過增強(qiáng)一致性來減少模塊間的接口和界面,從而增強(qiáng)了程序的可維護(hù)性;能清晰地體現(xiàn)出類與類之間的層次結(jié)構(gòu)關(guān)系。與繼承有關(guān)的注意事項繼承是單方向的,即派生類可以繼承和訪問基類中的成員,但基類則無法訪問派生類中的成員;在Java中只允許單一繼承方式,即一個派生類只能繼承于一個基類,而不能象C++中派生類繼承于多個基類的多重繼承方式。類成員的訪問控制權(quán)限信息隱藏是面向?qū)ο蟪绦蛟O(shè)計的重要特點之一,它可以:防止類的使用者意外損壞數(shù)據(jù);對任何實現(xiàn)細(xì)節(jié)所作的修改不會影響到使用該類的其它代碼;使類更易于使用。在Java中實現(xiàn)信息隱藏的是訪問控制權(quán)限機(jī)制;訪問控制權(quán)限包括4個訪問修飾符:public、protected、private和缺??;可以使用上述訪問修飾符修飾類的成員。訪問修飾符不受任何限制,本類或非本類均可隨意訪問。public本類及其子類可以訪問(父子友好),同一個包中的其它類也可訪問(包內(nèi)友好)。protected只有相同包中的類可以訪問(包內(nèi)友好)。缺省只有本類可以訪問,其余都不可以。private訪問控制權(quán)限(列表)publicprotected缺省private本類可以可以可以可以同包子類可以可以可以不可以同包非子類可以可以可以不可以不同包子類可以可以不可以不可以不同包且非子類可以不可以不可以不可以訪問修飾符位置課堂練習(xí)1源文件BaseClass.javapackage
mypkg;public
class
BaseClass{
public
int
pubA;
protected
int
proB;
int
defC;
private
int
priD;}源文件DerivedClass.javapackage
mypkg;public
class
DerivedClass
extends
BaseClass{
public
voidfun(){
pubA=10;
proB=20;
defC=30;
priD=40;}}√√√×課堂練習(xí)2源文件Frist.javapublic
class
Frist{
public
int
pubA;
protected
int
proB;
int
defC;
private
int
priD;}public
classSecond{
public
voidfun(){
Frist
obj;
obj=new
Frist();
obj.pubA=10;
B=20;
obj.defC=30;
obj.priD=40;}}源文件Second.java√√×√課堂練習(xí)3源文件SuperClass.javapackage
aaa;public
class
SuperClass{
public
int
pubA;
protected
int
proB;
int
defC;
private
int
priD;}源文件SubClass.javapackage
bbb;import
aaa.SuperClass;public
class
SubClass
extends
SuperClass{
public
voidfun(){
pubA=10;
proB=20;
defC=30;
priD=40;}}√√××類的訪問權(quán)限還可以在定義類時為類添加訪問修飾符,對類進(jìn)行訪問權(quán)限控制;對類使用的訪問修飾符只有public和缺省兩種;被public修飾的類可以從任何地方訪問,不受限制;不加訪問修飾符,缺省修飾的類只能從本包中訪問,不同包則無法訪問到;但要注意的是:在一個源文件中只能有一個被public修飾的類,并且文件名必須與public的類同名;如果要定義多個public的類,則必須分別寫在不同的源文件中,一個源文件只寫一個類是良好的編程習(xí)慣。繼承中的構(gòu)造方法父類中的構(gòu)造方法不能被子類繼承,即便它是public的;父類的構(gòu)造方法負(fù)責(zé)初始化屬于它的成員變量,而子類的構(gòu)造方法則只需考慮屬于自己的成員變量,不必去關(guān)注父類的情況。繼承中的構(gòu)造方法示例class
ParentClass{//定義父類
public
ParentClass(){//構(gòu)造方法
System.out.println("這是父類的構(gòu)造方法。");}}class
ChildClass
extends
ParentClass{//子類繼承于父類
public
ChildClass(){//構(gòu)造方法
System.out.println("這是子類的構(gòu)造方法。");}}public
class
ConstructorTest{//該類用于容納main方法
public
static
void
main(String[]args){
ChildClasscc=new
ChildClass();//實例化子類對象
}}構(gòu)造方法的執(zhí)行順序當(dāng)實例化子類的對象時,必須先執(zhí)行父類的構(gòu)造方法,然后再執(zhí)行子類的構(gòu)造方法;如果父類還有更上級的父類,就會先調(diào)用最高父類的構(gòu)造方法,再逐個依次地將所有繼承關(guān)系的父類構(gòu)造方法全部執(zhí)行;如果父類的構(gòu)造方法執(zhí)行失敗,那么子類的對象也將無法實例化。案例classPoint{//定義"點"類
//x軸坐標(biāo)和y軸坐標(biāo),由于準(zhǔn)備用于繼承,故修飾為protected
protected
float
mX,mY;
public
Point(floatx,floaty){//構(gòu)造方法
mX=x;
mY=y;}}classCircleextendsPoint{//定義"圓"類繼承于"點"類
protected
float
mRadius;//半徑
public
Circle(floatr){//構(gòu)造方法
mRadius=r;}}public
classDemo{
public
static
void
main(String[]args){Circlec=newCircle(2.5f);//實例化"圓"類對象
}}本例將報出錯誤案例分析在實例化Circle類對象時,虛擬機(jī)一定會先調(diào)用其父類(Point類)的構(gòu)造方法;Point類的構(gòu)造方法需要兩個參數(shù)來初始化其成員,但此時并沒有獲得這兩個參數(shù),造成Point類的構(gòu)造方法無法執(zhí)行;父類的構(gòu)造方法執(zhí)行失敗從而導(dǎo)致子類(Circle類)的對象也無法創(chuàng)建;問題的關(guān)鍵是:在實例化子類對象時,如何將參數(shù)傳遞給父類的構(gòu)造方法?這將使用到super關(guān)鍵字。super關(guān)鍵字的第一種用途在Java中,super關(guān)鍵字有兩個主要用途;第一種用途是:在子類的構(gòu)造方法中,super關(guān)鍵字可以顯式地調(diào)用父類的構(gòu)造方法,用于將參數(shù)傳遞給它;其一般語法是:
super(實際參數(shù));需要注意的是:該語句必須是子類構(gòu)造方法的第一條語句。super關(guān)鍵字示例1classPoint//定義"點"類{
protected
float
mX,mY;//x軸坐標(biāo)和y軸坐標(biāo)
public
Point(floatx,floaty)//構(gòu)造方法
{
mX=x;
mY=y;}……}classCircleextendsPoint//定義"圓"類繼承于"點"類{
protected
float
mRadius;//半徑
public
Circle(fl
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 委托冷凍協(xié)議書范本
- 林地調(diào)解協(xié)議書模板
- 汽車代工協(xié)議書模板
- 平臺運(yùn)營管理協(xié)議書
- 私企聘用員工協(xié)議書
- 投資合伙協(xié)議書樣本
- 醫(yī)院供貨誠信協(xié)議書
- 童裝租賃協(xié)議書范本
- 社區(qū)定點醫(yī)療協(xié)議書
- 委托養(yǎng)老培訓(xùn)協(xié)議書
- 2024年司法考試歷年證據(jù)法試題
- 深入解析SAS(數(shù)據(jù)處理、分析優(yōu)化與商業(yè)應(yīng)用)
- CJJ 122-2017 游泳池給水排水工程技術(shù)規(guī)程
- 2024年咨詢工程師之工程項目組織與管理題庫含完整答案(歷年真題)
- (正式版)JBT 14682-2024 多關(guān)節(jié)機(jī)器人用伺服電動機(jī)技術(shù)規(guī)范
- 國內(nèi)外化工發(fā)展情況及安全形勢
- 2018年高考數(shù)學(xué)全國1卷第12題出處及變式
- 設(shè)備維修費(fèi)用月度分析報告
- 土豆的介紹課件
- 人民法院第一審行政判決書及范例
- 南京大學(xué)儀器分析習(xí)題集
評論
0/150
提交評論