Java面向?qū)ο蟪绦蛟O(shè)計第5章_繼承與接口(1)_第1頁
Java面向?qū)ο蟪绦蛟O(shè)計第5章_繼承與接口(1)_第2頁
Java面向?qū)ο蟪绦蛟O(shè)計第5章_繼承與接口(1)_第3頁
Java面向?qū)ο蟪绦蛟O(shè)計第5章_繼承與接口(1)_第4頁
Java面向?qū)ο蟪绦蛟O(shè)計第5章_繼承與接口(1)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本次內(nèi)容本次內(nèi)容類的繼承類的繼承4123方法的多態(tài)性方法的多態(tài)性抽象類和最終類抽象類和最終類接口接口一、類的繼承一、類的繼承1 1用戶的需求變化用戶的需求變化2 2模塊重用模塊重用在大型應用程序的維護和設(shè)計中,經(jīng)常存在兩個問題:在大型應用程序的維護和設(shè)計中,經(jīng)常存在兩個問題:1 1、引入、引入繼承繼承是面向?qū)ο笕筇卣髦?,也是實現(xiàn)軟件是面向?qū)ο笕筇卣髦?,也是實現(xiàn)軟件復用的重要手段。復用的重要手段。一、類的繼承一、類的繼承2 2、繼承、繼承(1)(1)1、由繼承而得到的新類稱為子類,被繼承的類稱為父類或超類。2、父類和子類的關(guān)系,是一般和特殊的關(guān)系。一、類的繼承一、類的繼承2 2、繼承、繼

2、承(2)(2)類定義語句格式:class thisclass extends superclass子類父類子類擴展了父類,將可以獲得父類的全部屬性子類擴展了父類,將可以獲得父類的全部屬性和方法,但和方法,但JavaJava中的子類中的子類不能獲得父類的構(gòu)造不能獲得父類的構(gòu)造方法方法。如果類定義時沒有如果類定義時沒有extendsextends關(guān)鍵字,則其父類是關(guān)鍵字,則其父類是ObjectObject 。2 2、繼承、繼承(3)(3)public class Fruit public double weight; public void info() System.out.print(“我是一

3、個水果!重我是一個水果!重”+weight+”g!”); Fruit.javapublic class Apple extends Fruitpublic static void main(String args)Apple a =new apple();a.weight=56;(); Apple.java一、類的繼承一、類的繼承例子:PersonTeacherStudent2 2、繼承、繼承(4)(4)繼承多繼承單繼承Java只支持單繼承有了繼承機制,多個類可以互相關(guān)聯(lián),就不再有了繼承機制,多個類可以互相關(guān)聯(lián),就不再是各自封閉的了。是各自封閉的了。一、類的繼承一、類的繼承3 3、

4、重寫子類、重寫子類(1)(1)如果子類聲明一個與父類成員變量同名的成員變量,則不能繼承父類的同名成員變量。此時稱子類的成員變量隱藏了父類中的同名成員變量。子類繼承父類的一、類的繼承一、類的繼承3 3、重寫子類、重寫子類(2)(2)如果子類方法與父類方法同名,則不能繼承。此時稱子類方法重寫了父類中的同名方法。子類繼承父類的不能繼承父類的構(gòu)造方法。一、類的繼承一、類的繼承3 3、重寫子類、重寫子類(3)(3)方法重寫遵循的規(guī)則覆蓋方法和被覆蓋方法要么都是類方法,要么都覆蓋方法和被覆蓋方法要么都是類方法,要么都是實例方法,不能一個是類方法,一個是實例方是實例方法,不能一個是類方法,一個是實例方法。法

5、。一、類的繼承一、類的繼承子類不能重寫父類私有的方法子類不能重寫父類私有的方法 子類的方法不能比父類的方法有更嚴格的訪問權(quán)限子類的方法不能比父類的方法有更嚴格的訪問權(quán)限(子類子類的方法不能縮小父類方法的訪問權(quán)限的方法不能縮小父類方法的訪問權(quán)限 重寫的方法要和被重寫的方法的方法名稱、參數(shù)列表、重寫的方法要和被重寫的方法的方法名稱、參數(shù)列表、返回類型都要一樣返回類型都要一樣 若父類方法的訪問權(quán)限是private則子類方法的訪問權(quán)限可以是private、默認的、protected、public; 若父類方法的訪問權(quán)限是protected則子類方法的訪問權(quán)限可以是默認的、protected、publi

6、c; 若父類方法的訪問權(quán)限是默認的則子類方法的訪問權(quán)限可以是protected、public; 若父類方法的訪問權(quán)限是public則子類方法的訪問權(quán)限只能是public方法重寫遵循的規(guī)則方法重寫遵循的規(guī)則3 3、重寫子類、重寫子類(4)(4)如果父類方法具有private權(quán)限,則該方法對其子類是隱藏的,因此子類無法重寫該方法。class BaseClass private void test() class SubClass extends BaseClass public void test()此處不是方法重寫,只是在子類中重新定義了一個新方法一、類的繼承一、類的繼承3 3、重寫子類、重寫子

7、類(5)(5)Overloading和和overriding一樣么?一樣么?一、類的繼承一、類的繼承4 4、super(2)super(2)super的兩種用法用來訪問由子類成員所隱藏的超類成員用來調(diào)用超類的構(gòu)造函數(shù)一、類的繼承一、類的繼承4 4、super(1)super(1)class Bird public void fly() System.out.println(“我在天空里自由自在地飛翔我在天空里自由自在地飛翔”); public class Ostrich extends Bird/鴕鳥類鴕鳥類 public void fly() System.out.println(“我只能在

8、地上奔跑我只能在地上奔跑”); public void callOverrideMethod() /在子類方法中調(diào)用父類被覆蓋的實例方法在子類方法中調(diào)用父類被覆蓋的實例方法 super.fly();直接父類對象的默認引用一、類的繼承一、類的繼承Super_2續(xù)不管是否使用不管是否使用supersuper調(diào)用父類的構(gòu)造方法,調(diào)用父類的構(gòu)造方法,子類構(gòu)造方法總會調(diào)用父類的構(gòu)造方法一次。子類構(gòu)造方法總會調(diào)用父類的構(gòu)造方法一次。三種情況子類構(gòu)造器使用super調(diào)用父類構(gòu)造器,系統(tǒng)將根據(jù)super調(diào)用里傳入的實參列表調(diào)用父類對應的構(gòu)造器子類構(gòu)造器使用this調(diào)用本類中重載的構(gòu)造器,系統(tǒng)將根據(jù)this調(diào)用

9、里傳入的實參列表調(diào)用本類另一個構(gòu)造器。執(zhí)行本類中另一個構(gòu)造器時即會調(diào)用父類的構(gòu)造器子類構(gòu)造器中既沒有super調(diào)用,也沒有this調(diào)用,系統(tǒng)將會在執(zhí)行子類構(gòu)造器之前,隱式調(diào)用父類無參數(shù)的構(gòu)造器Super_2續(xù)java.lang.ObjectClassAClassB每個子類將繼承各自的所有父類中所定義的全部屬性。Super(3) 關(guān)鍵字關(guān)鍵字this:是直接訪問本類中的內(nèi)容; this.本類屬性,調(diào)用本類中的屬性; this.本類方法(),可以不寫this,也表示調(diào)用本類的; this是訪問本類中的其他構(gòu)造,必須放在首行。 關(guān)鍵字關(guān)鍵字super:是由子類訪問父類的內(nèi)容; super.父類屬性,

10、如果屬性沒有被覆寫,則也可以不寫super; super.父類方法(),如果方法沒有被覆寫,則可以不用加super也表示調(diào)用父類中的方法; super是訪問父類中的構(gòu)造方法,必須放在首行。5 5、初始化順序、初始化順序父類子類1、父類靜態(tài)、子類靜態(tài)2、父類定義初始化、構(gòu)造函數(shù)3、子類定義初始化、構(gòu)造函數(shù)一、類的繼承一、類的繼承成員變量的隱藏class MobileTelephone String cloth=“銀灰色銀灰色”; class NewMobileTelephone extends MobileTelephone String cloth=“牙白色牙白色”;public class

11、MainMobile public static void main(String args) NewMobileTelephone tel=new NewMobileTelephone(); System.out.println(“我有我有”+tel.cloth+”外殼!外殼!”); 隱藏了父類的color屬性重寫父類的方法class Bird public void fly() System.out.println(“我在天空里自由自在地飛翔我在天空里自由自在地飛翔”); public class Ostrich extends Bird/鴕鳥類鴕鳥類 public void fly()

12、System.out.println(“我只能在地上奔跑我只能在地上奔跑”); public static void main(String args) Ostrich os=new Ostrich(); os.fly(); 重寫父類的fly方法方法覆蓋、方法重寫(override)重載和重寫重載和重寫class Box /父類父類 double length,width,height; Box() length=-1;width=-1;height=-1; Box(doublel,double w,double h) /方法重載方法重載length=l;width=w;height=h; d

13、raw() System.out.println(draw a box!);class Boxcolor extends Box/繼承繼承int color; /多了個顏色的變量多了個顏色的變量Boxcolor(doublel,double w,double h,int c) length=l;width=w;height=h;color=c; draw() System.out.println(draw a colorful box!); 主要發(fā)生在同一個類的多個同名方法之間發(fā)生在子類和父類的同名方法之間Super_1class BaseClasspublic int a = 5;class

14、 SubClass extends BaseClass public int a = 7; public void accessOwner() System.out.println(a); public void accessBase() System.out.println(super.a); public static void main(String args) SubClass sc = new SubClass();System.out.println(sc.a);sc.accessOwner();sc.accessBase(); 通過super來訪問方法調(diào)用者對應的父類對象Supe

15、r_2class Basepublic double size;public String name; public Base(double size , String name) this.size = size; = name; public class Sub extends Base public String color; public Sub(double size , String name , String color) super(size , name);this.color = color; public static void main(String

16、args) Sub s = new Sub(5.6 , 測試對象測試對象 , 紅色紅色); System.out.println(s.size + - + + - + s.color); 調(diào)用父類的構(gòu)造方法,必須出現(xiàn)在子類構(gòu)造方法的第一行Object類的方法類的方法 1toString():用來打印一個類的對象(Eclipse使用) 2equals():比較兩個對象是否相等二、方法的多態(tài)性多態(tài)性:發(fā)送消息給某個對象,讓該對象自行決定響應何種行為。通過將子類對象引用賦值給超類對象引用變量來實現(xiàn)動態(tài)方法調(diào)用。java的這種機制遵循一個原則:當超類對象引用變量引用子類對象時,被引用對象

17、的類型而不是引用變量的類型決定了調(diào)用誰的成員方法,但是這個被調(diào)用的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法。1.如果a是類A的一個引用,那么,a可以指向類A的一個實例,或者說指向類A的一個子類。2.如果a是接口A的一個引用,那么,a必須指向?qū)崿F(xiàn)了接口A的一個類的實例。二、方法的多態(tài)性引用變量有兩個類型編譯時的類型運行時的類型由聲明該變量時使用的類型決定由實際賦給該變量的對象決定如果編譯時的類型和運行時類型不一致,就如果編譯時的類型和運行時類型不一致,就出現(xiàn)多態(tài)(出現(xiàn)多態(tài)(PolymorphismPolymorphism)。)。Hello h=new TestHello();Hell

18、o h=new Hello();二、方法的多態(tài)性class BaseClass public int book = 6; public void base() System.out.println (父類的普通方法 ); public void test() System.out.println (父類的被覆蓋的方法 ); public class SubClass extends BaseClasspublic String book = 輕量級輕量級J2EE企業(yè)應用實戰(zhàn)企業(yè)應用實戰(zhàn);public void test() System.out.println(子類的覆蓋父類的方法子類的覆蓋父

19、類的方法);public void sub()System.out.println(子類的普通方法子類的普通方法);public static void main(String args)BaseClass bc = new BaseClass();System.out.println(bc.book);bc.base();bc.test();SubClass sc = new SubClass();System.out.println(sc.book);sc.base();sc.test();sc.sub();BaseClass ploymophicBc = new SubClass();System.out.println(ploymophicBc.book);ploymophicBc.base();ploymophicBc.test();編譯時類型

溫馨提示

  • 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

提交評論