子類構(gòu)造器與方法重寫_第1頁
子類構(gòu)造器與方法重寫_第2頁
子類構(gòu)造器與方法重寫_第3頁
子類構(gòu)造器與方法重寫_第4頁
子類構(gòu)造器與方法重寫_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

面向?qū)ο蟪绦蛟O計(Java)

----子類構(gòu)造器、方法重寫深圳職業(yè)技術(shù)學院主講教師:袁梅冷2008-04-21電信學院---軟件工程系本單元教學內(nèi)容使用繼承改善系統(tǒng)類的結(jié)構(gòu)類成員的繼承規(guī)則子類構(gòu)造器子類對父類方法的重寫汽車管理系統(tǒng)系統(tǒng)是一個用于管理小轎車、客車等各類汽車資源的系統(tǒng)。功能主要包括:維護、存儲各類車的基本信息;提供汽車信息列表輸出等功能。分析:針對系統(tǒng)要求,應設計哪些核心類?汽車管理系統(tǒng)核心類1.用于描述各種類型車信息的車類,如Car類、Bus類;2.用于保存所有汽車基本信息的數(shù)據(jù)類。分析:1。Car類與Bus類各有什么成員屬性和方法?比較Car類與Bus類,發(fā)現(xiàn)什么異同?如果還需要其它車類,怎么做?VehicleData類用于保存維護所有汽車基本信息;分析VehicleData類問題:1.如何保存各類車信息?2.分析相關的add方法和list方法,比較異同。ArrayList類的使用ArrayList類封裝了一個Object類型的數(shù)組,我們可以使用它來維護一個Object的可變長數(shù)組。ArrayList對象的創(chuàng)建publicArrayList():默認的構(gòu)造器,將會以默認大?。?6)來初始化內(nèi)部的數(shù)組。publicArrayList(int

initialCapacity):用指定的大小來初始化內(nèi)部的數(shù)組。publicArrayList(Collectionc):用一個已有集合對象來構(gòu)造數(shù)組,并將該集合的元素添加到ArrayList的數(shù)組中。ArrayList類的使用ArrayList類的部分常用方法add(Objecto):在對象列表結(jié)構(gòu)的最后添加對象元素。add(intindex,Objectelement):在對象列表指定位置插入新的對象元素。remove(Objecto):從對象列表中移走對象。clear():清空列表中的所有對象元素。iterator():返回用于遍歷對象集合的指針。Java的循環(huán)控制結(jié)構(gòu)Java的循環(huán)語句共有三種,它們是:while循環(huán)語句for循環(huán)語句do…while循環(huán)語句。循環(huán)結(jié)構(gòu)由四個部分組成。初始化部分(initialization):一條或多條語句,用來做一些初始化的工作。循環(huán)條件部分(loop-condition):一個boolean型的表達式,根據(jù)它的值來判斷是否繼續(xù)下一次循環(huán)。循環(huán)體部分(body):將被反復執(zhí)行的代碼,可以是一條語句,也可以是一個語句塊(復合語句)。迭代部分(iteration):在一次循環(huán)結(jié)束后,下一次循環(huán)開始前執(zhí)行的語句,通常用于修改循環(huán)條件。Java的循環(huán)控制結(jié)構(gòu)while和for循環(huán)語句對應當型結(jié)構(gòu),do…while語句對應直到型結(jié)構(gòu)。當型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)While循環(huán)while的語法格式如下: [initialization] while(loop-condition){ body;

[iteration;]

}試一試:請分析下面程序段的功能,繪制其流程圖,并加以解釋。intcount=1;//定義并初始化循環(huán)變量Iintsum=0;//定義并初始化求和結(jié)果變量sumwhile(count<=100){//循環(huán)求和sum+=count;//循環(huán)體count++;}System.out.println(“1+2+...+100=”+sum);//輸出結(jié)果for循環(huán)for循環(huán)語句是當型結(jié)構(gòu),在幾種循環(huán)語句的使用中最為靈活,其語法格式如下:for([initialization];[loop-condition];[iteration]){

body;

}試一試:編寫使用for循環(huán)語句實現(xiàn)計算1到100的和的程序段。do…while循環(huán)語句do-while循環(huán)語句是直到型結(jié)構(gòu),它的語法格式如下:[initialization]

do{

body;

[iteration;]

}while(loop-condition);試一試:編寫使用do-while循環(huán)語句實現(xiàn)計算1到100的和的程序段。改善系統(tǒng)類結(jié)構(gòu)如何有效減少Car類和Bus類代碼的重復?觀察下圖基本思路:將Car類與Bus類的共性抽象出來,上移到Vehicle類中。以Vehicle類為基礎,構(gòu)建Car類和Bus類。相關概念類的繼承描述的是類與類之間的“isa”關系,即子類是比父類更為特殊的類,是父類的一種特例。繼承機制的優(yōu)點在于為我們提供了一種類級的代碼重用機制,使我們可以在現(xiàn)有類的基礎上,通過重用、修改或添加等方法創(chuàng)建一個新類。父類(或基類、超類)子類(或派生類)繼承的Java實現(xiàn)編寫例3-3程序在Java中使用關鍵字extends實現(xiàn)繼承,其基本語法格式為:classSubClassName

extends

SupClassName{}需要討論二個問題:1、子類中有什么?類成員的繼承規(guī)則是怎樣的?2、在繼承結(jié)構(gòu)中,構(gòu)造器是如何處理的?如何寫子類構(gòu)造器方法。類成員的繼承規(guī)則分析討論private成員的繼承性;分析討論public成員的繼承性;問題:如果父類的public方法是用來操作父類的私有變量呢?分析討論無訪問控制符修飾的成員的繼承性;protected訪問修飾符的使用protected是專為繼承而設計的訪問控制修飾符成員屬性與成員方法的繼承規(guī)則父類

publicdefaultprotectedprivate同一包中子類publicdefaultprotected不被繼承Java成員繼承規(guī)則試一試:編寫B(tài)us類的測試程序,參見P79-P80分析:Bus類中有哪些成員變量與成員方法?如果調(diào)用從父類繼承下來的公有方法?舉例說明?子類構(gòu)造器重新思考:構(gòu)造器的形式要求?構(gòu)造器的作用?觀察分析:Bus類與Car類構(gòu)造器方法理解子類構(gòu)造器在內(nèi)存機制中,子類對象的屬性包含從父類繼承下來的屬性和自己新增的屬性,因此,構(gòu)建對象時,也要先構(gòu)建父類的數(shù)據(jù)部分,再考慮子類增加的部分。子類構(gòu)造器子類構(gòu)造器的一般形式子類類名(構(gòu)造器參數(shù)列表){ super(與父類構(gòu)造器方法參數(shù)相對的實參);//①調(diào)用父類構(gòu)造器

//②對子類成員的初始化}實戰(zhàn)演練1.編寫一個矩形類Rect,該類包含:兩個私有屬性:矩形的長length和寬width。一個構(gòu)造器方法:帶2個參數(shù)的構(gòu)造器方法,用于對length和width屬性進行初始化。兩個公有成員方法:分別用于計算并返回矩形的面積和周長。實戰(zhàn)演練2.編寫一個具有確定位置的矩形類PlainRect,該類繼承于Rect類,其確定位置用矩形的左上角坐標來標識,為該類添加:兩個屬性:矩形左上角坐標startX和startY。兩個構(gòu)造器方法:(1)帶4個參數(shù)的構(gòu)造器方法,用于對startX、startY、width和height屬性初始化;(2)不帶參數(shù)的構(gòu)造器方法,將矩形初始化為左上角坐標、長和寬都為0的矩形;一個方法:方法isInside(double

x,doubley)。用于判斷某個點是否在矩形內(nèi)部,如在矩形內(nèi),返回true,否則,返回false。實戰(zhàn)演練3.編寫上題PlainRect類的測試程序(1)創(chuàng)建一個左上角坐標為(10,10),長為20,寬為10的矩形對象;(2)計算并打印輸出矩形的面積和周長;(3)判斷點(25.5,13)是否在矩形內(nèi),并打印輸出相關信息。方法覆蓋(重寫)當從父類繼承下來的方法不能完全滿足子類需要時,我們可以重寫該方法。如:Bus中從Vehicle類中繼承下來的方法printInfo()不能輸出車的座位數(shù)。修改Bus如下: classBusextendsVehicle{privateint

numOfSeat;publicBus(String

type,String

brand,double

price,int

numOfSeat){

super(type,brand,price);

this.numOfSeat=numOfSeat;}

publicvoidprintInfo(){//重寫父類中的printInfo()方法

super.printInfo();//調(diào)用父類中的該方法

System.out.println("座位數(shù):"+numOfSeat);

}

}方法覆蓋(重寫)重新運行Bus類的測試程序P79-P80方法覆蓋與方法重載的區(qū)別。方法重載要求:方法名相同,參數(shù)數(shù)目或參數(shù)類型不同;方法覆蓋要求:子類的方法定義應與父類保持一致。即應與父類有完全相同的方法名、返回值類型和參數(shù)列表,否則就不是方法的覆蓋,而是在子類中定義了自己的與父類無關的成員方法,此外,方法的覆蓋還應遵循以下規(guī)則:覆蓋方法的訪問控制應該與它所覆蓋的方法的訪問控制相同或更寬松;覆蓋方法不能比它所覆蓋的方法拋出更多的異常。試一試對于以下的類BaseClass和子類SubclassclassBaseClass{privatefloatx=1.0f;protectedfloatgetVar()(returnx;)}classSubclassextendsBaseClass{privatefloatx=2.0f;//方法插入處}以下哪些方法是方法getVar()的重寫方法:()A.floatgetVar(){returnx;}B.publicfloatgetVar(){returnx;}C.floatdoublegetVar(){returnx;}D.protectedfloatgetVar(){returnx;}E.publicfloatgetVar(floatf){returnf;}試一試14.對于以下給定的類:publicclassMethodOver{ publicvoidsetVar(inta,intb,floatc){}}下面哪些方法是方法setVar(inta,intb,floatc)的重載方法?()A.privatevoidsetVar(inta,floatc,intb){}B.protectedvoidsetVar(inta,intb,floatc){}C.public

int

setVar(inta,floatc,intb)(returna;)D.public

int

setVar(inta,intb,floatc)(returna;)E.protectedfloatsetVar(inta,intb,floatc)(returnc;)

變量的隱藏classSuperClass{ privateintvalue=10; publicvoidprintValue(){

System.out.println("value="+value);}}classDeriveClassextendsSuperClass{ privateintvalue=20;}實戰(zhàn)演練1. 編寫Employee類,該類包含:四個受保護屬性:雇員的姓名name、工號number、住址address和薪水salary。一個構(gòu)造器方法:用于初始化name、number和salary屬性。兩個公有成員方法:分別實現(xiàn)職員基本信息的輸出和按比例漲工資的功能。實戰(zhàn)演練2.編寫Manager類,該類繼承于Employee類(1)為其添加:兩個屬性:辦公室officeID和年終分紅bonus;一個構(gòu)造器方法:帶有4個參數(shù)的構(gòu)造器方法,用于對除bonus屬性外的所有其它屬性進行初始化;方法:officeID屬性和bonus屬性的相關set和get方法;(2)重寫Employee類中的方法raiseSalary(doubleproportion),經(jīng)理漲工資的計算方法為在雇員工資漲幅的基礎上增加10%的比例。實戰(zhàn)演練3.編寫TemporaryEmployee(臨時工)類,該類繼承于Employee類(1)為其添加:

溫馨提示

  • 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

提交評論