Java面向對象程序設計類的繼承_第1頁
Java面向對象程序設計類的繼承_第2頁
Java面向對象程序設計類的繼承_第3頁
Java面向對象程序設計類的繼承_第4頁
Java面向對象程序設計類的繼承_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、JavaJava面向對象程序設計面向對象程序設計深圳職業技術學院軟件技術專業類的繼承類的繼承內容提要4使用繼承改善系統類的結構使用繼承改善系統類的結構123類成員的繼承規則類成員的繼承規則子類構造器子類構造器子類對父類方法的重寫子類對父類方法的重寫汽車管理系統v 系統是用于管理小轎車、客車等各類汽車資源的系統。v 功能主要包括:維護、存儲各類車的基本信息;提供汽車信息列表輸出等功能。分析:針對系統要求,應設計哪些核心類?分析:針對系統要求,應設計哪些核心類?汽車管理系統核心類v 1.用于描述各種類型車信息的車類,如Car類、Bus類;v 2.用于保存所有汽車基本信息的數據類。v 分析:v 1。

2、Car類與Bus類各有什么成員屬性和方法?v 比較Car類與Bus類,發現什么異同?如果還需要其它車類,怎么做?VehicleData類v 用于保存維護所有汽車基本信息;用于保存維護所有汽車基本信息;v 分析分析VehicleDataVehicleData類類v 問題:問題:v 1. 1. 如何保存各類車信息?如何保存各類車信息?v 2 .2 .分析相關的分析相關的addadd方法和方法和listlist方法,比較異同。方法,比較異同。ArrayList類的使用v ArrayList類封裝了一個Object類型的數組,我們可以使用它來維護一個Object的可變長數組。v ArrayList對象

3、的創建v public ArrayList():默認的構造器,將會以默認大小16來初始化內部的數組。v public ArrayList(int initialCapacity):用指定的大小來初始化內部的數組。v public ArrayList(Collection c):用一個已有集合對象來構造數組,并將該集合的元素添加到ArrayList的數組中。ArrayList類的使用v ArrayList類的部分常用方法v add(Object o):在對象列表結構的最后添加對象元素。v add(int index, Object element):在對象列表指定位置插入新的對象元素。v rem

4、ove(Object o) :從對象列表中移走對象。 v clear():清空列表中的所有對象元素。v iterator():返回用于遍歷對象集合的指針。 Java的循環控制結構v JavaJava的循環語句共有三種,它們是:的循環語句共有三種,它們是:v while while 循環語句循環語句v for for 循環語句循環語句v dodowhilewhile循環語句。循環語句。v 循環結構由四個部分組成。循環結構由四個部分組成。v 初始化部分初始化部分initializationinitialization):一條或多條語句,用來做):一條或多條語句,用來做一些初始化的工作。一些初始化的

5、工作。v 循環條件部分循環條件部分loop-conditionloop-condition):一個):一個booleanboolean型的表型的表達式,根據它的值來判斷是否繼續下一次循環。達式,根據它的值來判斷是否繼續下一次循環。v 循環體部分循環體部分bodybody):將被反復執行的代碼,可以是一):將被反復執行的代碼,可以是一條語句,也可以是一個語句塊復合語句)。條語句,也可以是一個語句塊復合語句)。v 迭代部分迭代部分iterationiteration):在一次循環結束后,下一次循環):在一次循環結束后,下一次循環開始前執行的語句,通常用于修改循環條件。開始前執行的語句,通常用于修改

6、循環條件。Java的循環控制結構v while和for循環語句對應當型結構,dowhile語句對應直到型結構。初 始 化循 環 條 件循 環 體迭 代 部 分tru efa ls e初始化循環條件循環體迭代部分truefalse當型循環結構 直到型循環結構While循環v whilewhile的語法格式如下:的語法格式如下:vinitializationinitializationvwhile (loop-condition)while (loop-condition)vbody;body;viteration;iteration;v v 試一試:試一試:v請分析下面程序段的功能,繪制其流程圖

7、,并加以解釋。請分析下面程序段的功能,繪制其流程圖,并加以解釋。v int count=1; /int count=1; /定義并初始化循環變量定義并初始化循環變量I Iv int sum=0; /int sum=0; /定義并初始化求和結果變量定義并初始化求和結果變量sumsumv while(count=100) /while(count=100) /循環求和循環求和v sum+=count; /sum+=count; /循環體循環體v count+;count+;v v System.out.println(“1+2+.+100=”+sum);/System.out.println(“1

8、+2+.+100=”+sum);/輸出結果輸出結果for循環v for 循環語句是當型結構,在幾種循環語句的使用中最為靈活,其語法格式如下:v for (initialization;loop-condition; iteration)v body;v v 試一試:v 編寫使用for循環語句實現計算1到100的和的程序段。dowhile循環語句v do-while 循環語句是直到型結構,它的語法格式如下:v initializationv do v body;v iteration;v while (loop-condition);v 試一試:v 編寫使用do-while循環語句實現計算1到1

9、00的和的程序段。改善系統類結構v 如何有效減少Car類和Bus類代碼的重復?v 觀察下圖v 基本思路:v 將Car類與Bus類的共性抽象出來,上移到Vehicle類中。v 以Vehicle類為基礎,構建Car類和Bus類。相關概念v 類的繼承描述的是類與類之間的“is a ”關系,即子類是比父類更為特殊的類,是父類的一種特例。繼承機制的優點在于為我們提供了一種類級的代碼重用機制,使我們可以在現有類的基礎上,通過重用、修改或添加等方法創建一個新類。父類或基類、超類)子類或派生類)繼承的Java實現v 編寫例3-3程序v 在Java中使用關鍵字extends實現繼承,其基本語法格式為:v cla

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

11、ectedprotectedprivateprivate同一包中子類同一包中子類publicpublicdefaultdefaultprotectedprotected不被繼承不被繼承Java成員繼承規則v 試一試:試一試:v 編寫編寫BusBus類的測試程序,參見類的測試程序,參見P79P79P80P80v 分析:分析:v BusBus類中有哪些成員變量與成員方法?類中有哪些成員變量與成員方法?v 如果調用從父類繼承下來的公有方法?舉例說明?如果調用從父類繼承下來的公有方法?舉例說明?子類構造器v 重新思考:重新思考:v 構造器的形式要求?構造器的形式要求?v 構造器的作用?構造器的作用?v

12、 觀察分析:觀察分析:v BusBus類與類與CarCar類構造器方法類構造器方法v 理解子類構造器理解子類構造器v 在內存機制中,父類與子類占用同一塊內存,只不過子類在內存機制中,父類與子類占用同一塊內存,只不過子類在父類的基礎上增加了自己的部分,即子類依附于父類,在父類的基礎上增加了自己的部分,即子類依附于父類,先有父類再有子類。因而,構建對象時,也要先構建父類先有父類再有子類。因而,構建對象時,也要先構建父類的數據部分,再考慮子類增加的部分。的數據部分,再考慮子類增加的部分。子類構造器v 子類構造器的一般形式子類構造器的一般形式v 子類類名構造器參數列表)子類類名構造器參數列表) vsu

13、per(super(與父類構造器方法參數相對的實參與父類構造器方法參數相對的實參); /); /調用調用父父 類構造器類構造器v/對子類成員的初始化對子類成員的初始化v 實戰演練v 1 1編寫一個矩形類編寫一個矩形類RectRect,該類包含:,該類包含:v 兩個私有屬性:矩形的長兩個私有屬性:矩形的長lengthlength和寬和寬widthwidth。v 一個構造器方法:帶一個構造器方法:帶2 2個參數的構造器方法,用于對個參數的構造器方法,用于對lengthlength和和widthwidth屬性進行初始化。屬性進行初始化。v 兩個公有成員方法:分別用于計算并返回矩形的面積和周兩個公有成

14、員方法:分別用于計算并返回矩形的面積和周長。長。實戰演練v 2 2編寫一個具有確定位置的矩形類編寫一個具有確定位置的矩形類PlainRectPlainRect,該類繼,該類繼承于承于RectRect類,其確定位置用矩形的左上角坐標來標識,為類,其確定位置用矩形的左上角坐標來標識,為該類添加:該類添加:v 兩個屬性:矩形左上角坐標兩個屬性:矩形左上角坐標startXstartX和和startYstartY。v 兩個構造器方法:兩個構造器方法:v (1 1帶帶4 4個參數的構造器方法,用于對個參數的構造器方法,用于對startXstartX、startYstartY、widthwidth和和hei

15、ghtheight屬性初始化;屬性初始化;v (2 2不帶參數的構造器方法,將矩形初始化為左上角坐不帶參數的構造器方法,將矩形初始化為左上角坐標、長和寬都為標、長和寬都為0 0的矩形;的矩形;v 一個方法:方法一個方法:方法isInside(double x,double y)isInside(double x,double y)。用于判斷。用于判斷某個點是否在矩形內部,如在矩形內,返回某個點是否在矩形內部,如在矩形內,返回true, true, 否則,否則,返回返回falsefalse。實戰演練v 3 3編寫上題編寫上題PlainRectPlainRect類的測試程序類的測試程序v (1 1

16、創建一個左上角坐標為創建一個左上角坐標為1010,1010),長為),長為2020,寬,寬為為1010的矩形對象;的矩形對象;v (2 2計算并打印輸出矩形的面積和周長;計算并打印輸出矩形的面積和周長;v (3 3判斷點判斷點(25.5(25.5,13)13)是否在矩形內,并打印輸出相關是否在矩形內,并打印輸出相關信息。信息。方法覆蓋重寫)v 當從父類繼承下來的方法不能完全滿足子類需要時,我們可以重寫當從父類繼承下來的方法不能完全滿足子類需要時,我們可以重寫該方法。該方法。v 如:如:BusBus中從中從VehicleVehicle類中繼承下來的方法類中繼承下來的方法printInfo()pr

17、intInfo()不能輸出車的不能輸出車的座位數。修改座位數。修改BusBus如下:如下:vclass Bus extends Vehicleclass Bus extends Vehiclev private int numOfSeat; private int numOfSeat; v public Bus(String type,String brand,double price,int public Bus(String type,String brand,double price,int numOfSeat)numOfSeat)v super(type,brand,price); s

18、uper(type,brand,price);v this.numOfSeat=numOfSeat; this.numOfSeat=numOfSeat;v vpublic void printInfo() /public void printInfo() /重寫父類中的重寫父類中的printInfoprintInfo()方法()方法v super.printInfo(); /super.printInfo(); /調用父類中的調用父類中的該方法該方法v System.out.println(System.out.println(座位數座位數: + : + numOfSeat); numOfSe

19、at); v v 方法覆蓋重寫)v 重新運行重新運行BusBus類的測試程序類的測試程序P79-P80P79-P80v 方法覆蓋與方法重載的區別。方法覆蓋與方法重載的區別。v 方法重載要求:方法名相同,參數數目或參數類型不同;方法重載要求:方法名相同,參數數目或參數類型不同;v 方法覆蓋要求:子類的方法定義應與父類保持一致。即應方法覆蓋要求:子類的方法定義應與父類保持一致。即應與父類有完全相同的方法名、返回值類型和參數列表,否與父類有完全相同的方法名、返回值類型和參數列表,否則就不是方法的覆蓋,而是在子類中定義了自己的與父類則就不是方法的覆蓋,而是在子類中定義了自己的與父類無關的成員方法,此外

20、,方法的覆蓋還應遵循以下規則:無關的成員方法,此外,方法的覆蓋還應遵循以下規則:v 覆蓋方法的訪問控制應該與它所覆蓋的方法的訪問控制相覆蓋方法的訪問控制應該與它所覆蓋的方法的訪問控制相同或更寬松;同或更寬松;v 覆蓋方法不能比它所覆蓋的方法拋出更多的異常。覆蓋方法不能比它所覆蓋的方法拋出更多的異常。實戰演練v 1 1 編寫編寫EmployeeEmployee類,該類包含:類,該類包含:v 四個受保護屬性:雇員的姓名四個受保護屬性:雇員的姓名namename、工號、工號numbernumber、住、住址址addressaddress和薪水和薪水salarysalary。v 一個構造器方法:用于初

21、始化一個構造器方法:用于初始化namename、numbernumber和和salarysalary屬性。屬性。v 兩個公有成員方法:分別實現職員基本信息的輸出和按比兩個公有成員方法:分別實現職員基本信息的輸出和按比例漲工資的功能。例漲工資的功能。實戰演練v 2 2編寫編寫ManagerManager類,該類繼承于類,該類繼承于EmployeeEmployee類類v (1 1為其添加:為其添加:v 兩個屬性:辦公室兩個屬性:辦公室officeIDofficeID和年終分紅和年終分紅bonusbonus;v 一個構造器方法:帶有一個構造器方法:帶有4 4個參數的構造器方法,用于對除個參數的構造器

22、方法,用于對除bonusbonus屬性外的所有其它屬性進行初始化;屬性外的所有其它屬性進行初始化;v 方法:方法:officeIDofficeID屬性和屬性和bonusbonus屬性的相關屬性的相關setset和和getget方法;方法;v (2 2重寫重寫EmployeeEmployee類中的方法類中的方法raiseSalary(double raiseSalary(double proportion)proportion),經理漲工資的計算方法為在雇員工資漲幅,經理漲工資的計算方法為在雇員工資漲幅的基礎上增加的基礎上增加10%10%的比例。的比例。實戰演練v 3 3編寫編寫TemporaryEmployeeTemporaryEmployee臨時工類,該類繼承臨時工類,該類繼承于于EmployeeEmployee類類v (1 1為其添加:為其添加:v 一個屬性:雇傭年限一個屬性:雇傭年限hir

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論