資源描述:
《第四章 面向?qū)ο缶幊谈呒?jí)技術(shù)ppt課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第四章面向?qū)ο蟾呒?jí)技術(shù)面象對(duì)象高級(jí)技術(shù)類的繼承:重用多態(tài)性:靜態(tài)多態(tài)(編譯期多態(tài))動(dòng)態(tài)多態(tài)(運(yùn)行期多態(tài))抽象類/接口繼承學(xué)生人公司雇員中學(xué)生大學(xué)生經(jīng)理普通員工輪船客輪貨輪1、討論:圖所表示的關(guān)系2、輪船——客輪的關(guān)系示例(共性與個(gè)性)3、列舉其它的類似關(guān)系4、繼承是一種代碼重用機(jī)制,反映了類之間的”isa”關(guān)系。父類(或基類、超類)子類(或派生類)繼承貨車:屬性:車牌號(hào)、車類型、購車價(jià)格、出租單價(jià)、出租里程數(shù)、噸位數(shù)、租金。方法:租金計(jì)算等。大客車:屬性:車牌號(hào)、車類型、購車價(jià)格、出租單價(jià)、出租里程數(shù)、出租小時(shí)數(shù)、坐位數(shù)、租金。方法:租金計(jì)算等。小轎車:屬性:車牌號(hào)、
2、車類型、購車價(jià)格、出租單價(jià)、出租里程數(shù)、出租天數(shù)、租金。方法:租金計(jì)算等。各類車之間的關(guān)系圖示父類(或基類、超類)子類(或派生類)繼承的語法繼承的語法使用關(guān)鍵字extends格式:classSubNameextendsSupName{//其它代碼…}如:classManagerextendsEmpoyee{}例4-1:VehicleTest1.java成員屬性與成員方法的繼承規(guī)則父類publicdefaultprotectedprivate同一包中子類publicdefaultprotected不被繼承擴(kuò)展子類、編程實(shí)踐擴(kuò)展子類為子類添加新的成員屬性;為子類添加新的成員
3、方法;子類由兩部分組成:從父類繼承的屬性和方法.自身新增的屬性和方法.例4-2:VehicleTest2.java實(shí)戰(zhàn)演習(xí)1.創(chuàng)建一個(gè)具有確定位置矩形類PlainRect,該類繼承于第三章中例3_4中的類Rect2,其確定位置用矩形的左上角坐標(biāo)來標(biāo)識(shí),為該類添加:兩個(gè)屬性:矩形左上角坐標(biāo)startX和startY。一個(gè)方法:方法isInside(doublex,doubley)。用于判斷某個(gè)點(diǎn)是否在矩形內(nèi)部,如在矩形內(nèi),返回true,否則,返回false。2.編寫上題PlainRect類的測(cè)試程序(1)創(chuàng)建一個(gè)左上角坐標(biāo)為(10,10),長為20,寬為10的矩形對(duì)象;(
4、2)計(jì)算并打印輸出矩形的面積和周長;(3)判斷點(diǎn)(25.5,13)是否在矩形內(nèi),并打印輸出相關(guān)信息。PlainRectTest.javaRect2.java分析與討論襯衣與裙子類具有許多相同的屬性,能否將它們看成一種繼承關(guān)系?深入理解繼承概念面向?qū)ο笾械睦^承是一個(gè)基于分類學(xué)的概念,繼承描述的是一種“isa”的關(guān)系。子類是父類在同一個(gè)分類分支上的一個(gè)更為特殊的類,只有當(dāng)類之間存在的是一種能夠被描述為:“子類isa父類”的時(shí)候,我們才使用繼承。因此,在面向?qū)ο蟪绦蛟O(shè)計(jì)中,Skirt與Shirt類不能表示為一種繼承關(guān)系。添加抽象服裝襯衣裙子“繼承”的使用規(guī)則一、如果類A和類B
5、毫不相關(guān),不可以為了使B的功能更多些而讓B繼承A的功能。不要覺得“白吃白不吃”,讓一個(gè)好端端的健壯青年無緣無故地吃人參補(bǔ)身體。二、如果類B有必要使用A的功能,則要分兩種情況考慮:(1)若在邏輯上B是A的“一種”(”isa”),則允許B繼承A的功能。如男人(Man)是人(Human)的一種,男孩(Boy)是男人的一種。那么類Man可以從類Human派生,類Boy可以從類Man派生。(2)若在邏輯上A是B的“一部分”(”hasa”),則不允許B繼承A的功能,而是要用A和其它東西組合出B。子類構(gòu)造器為Vehicle類添加構(gòu)造器方法,觀察編譯結(jié)果子類構(gòu)造器構(gòu)造器主要用來完成對(duì)類
6、成員屬性進(jìn)行初始化,子類中的屬性包含從父類繼承下來的屬性和自己新添加的屬性屬性初始化的順序規(guī)定為:先初始化從父類中繼承的屬性,再初始化子類新添加屬性。格式:constructor(){super(父類構(gòu)造器參數(shù));//調(diào)用父類構(gòu)造器其它;//對(duì)本類屬性進(jìn)行初始化或其它處理代碼}子類構(gòu)造器注意:1、super必須為子類構(gòu)造方法的第一個(gè)語句。為什么?2、子類不寫super語句時(shí),默認(rèn)調(diào)用父類無參構(gòu)造方法。如果父類沒有無參構(gòu)造方法,在子類中不寫super語句會(huì)出錯(cuò)。編程實(shí)踐例4-3:Truck3Test.java實(shí)戰(zhàn)演習(xí):按照習(xí)題1、2修改PlainRect類,使用super
7、來初始化父類屬性子類對(duì)父類屬性的隱藏如果子類聲明了一個(gè)與父類的成員變量同名的成員變量,則稱父類的該成員變量被隱藏(hiding)下面代碼段的輸出結(jié)果是?classA{protectedintx=10;}classHidingextendsA{privateintx=20;voidprint(){System.out.println("x="+x);}publicstaticvoidmain(Stringargs[]){Hidingb=newHiding();b.print();}}1.輸出x=20還是x=10?2.如何訪問從父類繼承下來的