資源描述:
《java課件-繼承和多態(tài)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、類的繼承被繼承的類稱為父類或者超類或者基類繼承父類的類稱為子類或者派生類執(zhí)行繼承時,子類將獲得父類的所有成員(包括private的成員),并具有自身特有的屬性。繼承是面向?qū)ο缶幊碳夹g(shù)的一塊基石,它允許創(chuàng)建分等級層次的類。運用繼承,可以創(chuàng)建一個通用類定義一系列一般特性。該類可以被更具體的類繼承Emoloyee類:namesexWorker類:categorydressAllowanceOfficer類:empClassvehicle職員類,具有姓名和性別兩個屬性工人類,繼承了父類的姓名和性別屬性外還包
2、含類別和是否有服裝津貼屬性主任類,還包含級別和是否配備交通工具屬性extends關鍵字extends關鍵字用于繼承類。聲明一個繼承父類的類的通常形式如下:classsubclass-nameextendssuperclass-name{//類體}沒有extends,默認父類為Object一個類只能有一個父類,即單繼承子類繼承父類的全部成員注意繼承示例classEmployee{Stringname;//姓名charsex;//性別Employee(Stringn,chars){name=n;sex=
3、s;}publicStringgetName(){returnname;}publicchargetSex(){returnsex;}}classWorkerextendsEmployee{charcategory;//類別booleandressAllowance;//是否提供服裝津貼Worker(Stringn,chars,charc,booleand){super(n,s);category=c;dressAllowance=d;}publicchargetCategory(){returnc
4、ategory;}publicbooleangetAll(){returndressAllowance;}}classInheDemo{publicstaticvoidmain(Stringargs[]){Workerw=newWorker("M.John",'M','B',true);System.out.println("工人信息");System.out.println("姓名:"+w.getName());System.out.println("性別:"+w.getSex());System
5、.out.println("類別:"+w.getCategory());if(w.getAll())System.out.println("提供服裝津貼");elseSystem.out.println(“未提供服裝津貼”);}}繼承分析在子類中不能直接訪問父類中的私有成員子類和父類之間應該有“IS-A”關系不要濫用繼承,只有在分類學上有意義時,才應該使用繼承子類具有擴展超類的責任繼承的目的就是為了代碼復用里式代換原則定義:無論何時,只要程序需要一個超類對象,那么就可以用一個子類對象來替代它。Emp
6、loyeee;e=newEmployee();//需要超類Employee對象e=newManager();//用子類對象替換掉超類對象注意:反過來是不行的多態(tài)和動態(tài)綁定聲明類型:對象變量被聲明時的類型實際類型:對象變量實際指向的對象類型一個對象變量可以指向多種實際類型的現(xiàn)象稱為“多態(tài)”在運行時自動選擇正確的方法進行調(diào)用的現(xiàn)象稱為“動態(tài)綁定”Java根據(jù)對象的實際類型來進行方法調(diào)用方法重載(overloading)方法重載是Java實現(xiàn)面向?qū)ο蟮亩鄳B(tài)性機制的一種方式。同一個類中多個方法有相同的名字,
7、不同的參數(shù)列表,這種情況稱為方法重載。當重載方法被調(diào)用時,Java編譯器根據(jù)參數(shù)的類型和數(shù)量來確定實際調(diào)用哪個重載方法的版本。方法重載不考慮方法的返回類型。重載構(gòu)造函數(shù)一個類可以有多個構(gòu)造函數(shù)如果一個類沒有定義一個構(gòu)造函數(shù),Java編譯器將為這個類自動提供缺省構(gòu)造函數(shù)(即無參的構(gòu)造函數(shù))缺省構(gòu)造函數(shù)將成員變量的值初始化為缺省值一旦創(chuàng)建了自己的構(gòu)造函數(shù),Java編譯器將不再自動提供無參的構(gòu)造函數(shù)。重載構(gòu)造函數(shù)提供了一組創(chuàng)建對象的方式,可以根據(jù)需要決定是否帶初始參數(shù)。publicclassconstru
8、ctOverload{intx;constructOverload(){x=0;System.out.println("不帶參數(shù)的構(gòu)造函數(shù)");}constructOverload(intx){this.x=x;System.out.println("帶一個參數(shù)的構(gòu)造函數(shù)");}}方法覆蓋(override)方法覆蓋是Java實現(xiàn)多態(tài)性機制的另一種方式。在類層次結(jié)構(gòu)中,如果子類中的一個方法與父類中的方法有相同的返回類型、相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,這種