版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第四章補充案例案例4舁類的繼承一、案例描述1、考核知識點編號:00104001名稱:類的繼承2、練習(xí)目標> 了解類繼承的意義和作用>掌握如何實現(xiàn)類的繼承3、需求分析在程序中,繼承描述的是爭物之間的所屬關(guān)系,通過繼承可以使多種事物之間形成一種關(guān)系體系。 為了讓初學(xué)者熟悉類的繼承,本案例將演示類的繼承并編寫測試類驗證子類是否擁有父類的可繼承成 員。4、設(shè)計思路(實現(xiàn)原理)1)設(shè)計兩個類Student和Teacher2)抽取兩個類共同的內(nèi)容(如:吃飯、睡覺)封裝到一個類Person中,各自特有的部分保留在 各自類中。3)讓學(xué)生類繼承Person類,老師類也繼承Persono4)編寫測試類
2、ExainpleOl,測試Student類和Teacher是否繼承了 Person類的成員。二、案例實現(xiàn)1、抽取父類Person,實現(xiàn)繼承關(guān)系,代碼如下: class Person String name; /姓名/吃飯的功能void eat ()System.out.println(n;/唾覺的功能void sleep()System out prinrln ("I唾覺");class Student extends Person 博學(xué)谷-讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效/學(xué)號int sid;class Teacher extends Person /工號int tid
3、;/教課的功能void teach()Systemou匕println ("老0帀教課");2、定義測試類ExampleOl,代碼如下:public class ExampleOlpub lie static void main (S "cring 門 args)Student s = new Student();s eat();s sleep();Systemoutprintln("H;Teacher Z = new Teacher();t eat();t sleep();t teach();運行結(jié)果如圖4所示。圖4運行結(jié)果三、案例總結(jié)1、在Java中
4、,多個類可以繼承一個父類,但是一個類不能直接繼承多個類,一個類只能有一個直接 父類。2、父類是由子類不斷抽取而來的,不斷地抽取就形成了體系結(jié)構(gòu),這個結(jié)構(gòu)稱為繼承體系結(jié)構(gòu)。3、子類在繼承父類的時候,會自動擁有父類所有的成員。4、繼承的好處是劃分了類的層次性,實現(xiàn)了代碼重用、擴展了程序功能。案例42方法的重寫、案例描述1、考核知識點編號:00104002名稱:方法的重寫2、練習(xí)目標> 了解方法重寫的意義和作用>掌握如何進行方法重寫3、需求分析在繼承關(guān)系中,子類會自動繼承父類中定義的方法,但有時在子類中需要對繼承的方法進行一些 修改,即對父類的方法進行重寫。為了讓初學(xué)者掌握方法的重寫,本
5、案例將編寫一個類NewPhone, 該類繼承Phone類并對Phone類的call()方法進行重寫。4、設(shè)計思路(實現(xiàn)原理)1) 定義一個類Phone,編寫方法call。,表示打電話功能2) 定義一個Phone的子類NewPhone,重寫父類call()方法,讓它除了打電話功能外還具有開啟語 言和關(guān)閉語言功能。3) 編寫一個測試類Example02,分別調(diào)用重寫前和重寫后的call()方法二、案例實現(xiàn)1、定義Phone及其子類NewPhone,子類對父類中的call。方法重寫,代碼如下: class Phone void call() System.out.pzintln ("打電話
6、");class NewPhone extends Phone void call() System.out .printIn ("開啟語音");super call();System.out println C咲閉語音");2、定義測試類Example02,代碼如下:public class Example02public static void main(String args) System.out println ("一一重寫前一一");Phone phone = new Phone ();phone call ();Syst
7、em.out println ("一一重寫丿呂一一");Phone newPhone = new NewPhone (); newPhone call ();運行結(jié)果如圖4-2所示。1員管理員命令提示符-!x|D : amplcPacSchaptcr04>jaua Example02 軍寫前-打垂話重寫后_卄啟諳音僭1、丟閉語音2圖42運行結(jié)果三、案例總結(jié)1、子類中需要對繼承自父類的方法進行一些修改,這時就用到方法重寫。2、在子類中重寫的方法需要和父類被重寫的方法具有相同的方法名、參數(shù)列表以及返回值類型。3、子類方法的訪問修飾權(quán)限不能小于父類的。4、重寫的主要優(yōu)點是能
8、夠定義子類特有的特征。案例4-3 super訪問父類成員變量案例描述1、考核知識點編號:00104003名稱:super關(guān)鍵字2、練習(xí)目標> 掌握使用super關(guān)鍵字訪問父類成員變量3、需求分析子類可以繼承父類的非私有成員變量,如果在子類中修改了繼承自父類的成員變量的值,再想要 訪問父類的該成員變量時,可以通過super.成員變量來實現(xiàn)。為了讓初學(xué)者熟悉super關(guān)鍵字的用法, 本案例將分別設(shè)計Fu類及其子類Z1,并在Z1類的方法中使用super關(guān)鍵字訪問Fu類的成員變量。4、設(shè)計思路(實現(xiàn)原理)1)編寫一個Fu類,在類中定義無參構(gòu)造和一個初始值為20的num成員變量。2)Z1類繼承Fu
9、類,在子類中對num值進行了修改,同時在子類中定義無參構(gòu)造和一個無返回值 的method。方法,metliod()方法中使用super關(guān)鍵字調(diào)用了 Fu類的num成員變量。3)定義測試類Example03。二、案例實現(xiàn)1、編寫Fu類及其子類Z1,在Z1類中使用super關(guān)鍵字調(diào)用Fu類成員變量,代碼如下 class Fu Fu() int num = 20;class Zi extends Fu 2i() int num = 30;/ 修改 num 的值void method()System.out.println("method");/ super關(guān)鍵字調(diào)用父類成員變量S
10、ystem.out println (nFu 類中 num 值為:M + super .num);System.out.p工intln ("Zi 類中 num 值為:M + num);2、定義測試類Example03,代碼如下:class Example03public static void main(String args) Zi z = new Zi ();z.method();運行結(jié)果如圖43所示。邑管理員命令提示奇-|n|x|3D: Xs amp le Pac kage c hapt e>j au a Example 03nethodFu類中ruuu值為:20JZi糞
11、Hniirvf肖為:30圖43運行結(jié)果三、案例總結(jié)1、使用supei關(guān)鍵字調(diào)用父類的成員方法。具體格式如下: super.成員變雖2、被調(diào)用的父類成員變量,必須是非private的。案例4-4 super訪問父類成員方法一、案例描述1、考核知識點編號:00104003名稱:super關(guān)鍵字2、練習(xí)目標> 掌握使用super關(guān)鍵字訪問父類成員方法3、需求分析子類重寫父類的方法后,子類對彖將無法訪問父類被重寫的方法,為了解決這個問題,在Jaw中 專門提供了一個super關(guān)鍵字用于訪問父類的成員。為了讓初學(xué)者熟悉super關(guān)鍵字的用法,本案例將 分別設(shè)計Fu類及其子類Z1,在Z1類的方法中使用
12、super關(guān)鍵字訪問Fu類的成員方法。4、設(shè)計思路(實現(xiàn)原理)1) 編寫一個Fu類,在類中定義無參構(gòu)造和一個無返回值的show。方法。2) Zi類繼承Fu類,子類中定義無參構(gòu)造和一個無返回值的method()方法,method()方法中使用 super關(guān)鍵字調(diào)用了 Fu類的show()方法。3) 定義測試類Example04。二、案例實現(xiàn)1、編寫Fu類及其子類Zi,在Zi類中使用super關(guān)鍵字調(diào)用Fu類成員方法,代碼如下: class Fu Fu() void show() System .out p rintln (nFu show'1);class Zi extends Fu 2
13、i() void method()System.out.println("Zi method");/ super關(guān)鍵字調(diào)用父類成員方法super show();2、定義測試類Example04,代碼如下:class Example04public static void main(String args) Zi z = new Zi ();z.method();-|g|x|運行結(jié)果如圖44所示。D: sanplePackage char)ter04>Jaua Example04 Zi methodFu show圖44運行結(jié)果三、案例總結(jié)1、使用supei關(guān)鍵字調(diào)用父類
14、的成員方法。具體格式如下: super.成員方法(參數(shù)1,參數(shù)2.)2、被調(diào)用的父類成員方法,必須是非private的。案例45 super訪問父類構(gòu)造方法案例描述1、考核知識點編號:00104003名稱:super關(guān)鍵字2、練習(xí)目標掌握如何在子類構(gòu)造方法中使用super關(guān)鍵字訪問父類構(gòu)造方法3、需求分析在子類的構(gòu)造方法中一定會調(diào)用父類的某個構(gòu)造方法,如果想指定調(diào)用類父類中的哪個構(gòu)造方法, 可以使用super關(guān)鍵字來實現(xiàn)。為了讓初學(xué)者掌握super關(guān)鍵字的用法,本案例將分別設(shè)計Fu類及其 子類Zi,在Z1類的構(gòu)造方法中使用super關(guān)鍵字訪問Fu類的構(gòu)造方法。4、設(shè)計思路(實現(xiàn)原理)1)編寫一
15、個Fu類,在類中定義無參構(gòu)造。2)Z1類繼承Fu類,子類中也定義無參構(gòu)造方法,在構(gòu)造方法中使用super關(guān)鍵字調(diào)用Fu類的構(gòu) 造方法。3)定義測試類Example05。二、案例實現(xiàn)1、編寫Fu類及其子類Z1,在Z1類構(gòu)造中使用super關(guān)鍵字調(diào)用Fu類構(gòu)造方法,代碼如下: class Fu Fu() System.out println ("Fu 類構(gòu)造方法! H);class Zi extends Fu 2i() super () ;/在子類構(gòu)造中調(diào)用父類構(gòu)造System.out println ("Zi 類構(gòu)造方法! H ;2、定義測試類Example05,代碼如下:p
16、ublic class Example05public static void main(String args) Zi zi = new Zi();運行結(jié)果如圖45所示。武管理員.命令提示奇-|n|x|D: sanplePackage Schapter04>Jaua Example053力類松適方袪?圖45運行結(jié)果三、案例總結(jié)1、通過supei調(diào)用父類構(gòu)造方法的代碼必須位于子類構(gòu)造方法的第一行,并且只能出現(xiàn)一次。2、在子類的構(gòu)造方法中通過super指定調(diào)用父類的哪個構(gòu)造方法,如果沒有指定,在實例化子類對象 時,會自動調(diào)用父類無參的構(gòu)造方法。3、被調(diào)用的父類構(gòu)造方法,必須是非privat
17、e的。案例46 final修飾類%案例描述1、考核知識點編號:00104004名稱:final關(guān)鍵字2、練習(xí)目標> 了解filial關(guān)鍵字修飾類的特點>掌握filial關(guān)鍵字修飾類的用法3、需求分析Java中的類被final關(guān)鍵字修飾后,該類將不可以被繼承,也就是不能夠派生子類。為了讓初學(xué)者 熟悉final關(guān)鍵字修飾類的用法,本案例將分別設(shè)計兩個類,一個是使用final關(guān)鍵字修飾的Fu類,另 一個是繼承Fu類的Zi類,驗證filial關(guān)鍵字修飾的類是否能被繼承。4、設(shè)計思路(實現(xiàn)原理)1)編寫一個final關(guān)鍵字修飾的Fu類,類體可以為空2)編寫Zi類,Zi類繼承于Fu類,類體可以
18、為空3)定義測試類Example06。二、案例實現(xiàn)1、編寫final修飾的Fu類,Z1類繼承Fu類,代碼如下: final class Fu (/類體為空代碼/Zi類繼承final修飾的Fu類class Zi extends Fu /類體為空代碼2、定義測試類Example06,代碼如下: public class ExampleO6(publie static void main(String args)Zi zi = new Zi();-|g|x|運行結(jié)果如圖46所示。D:sanplePackagechapter04>jauac Example06 javaExample06.jau
19、a:S:錯誤,無憾從最終進行継承 class Zi extends Fu <L個錯誤'圖4-6運行結(jié)果三、案例總結(jié)在Java中,被final關(guān)鍵字修飾的類為最終類,不能被其它類繼承。案例47 final修飾方法一、案例描述1、考核知識點編號:00104004名稱:final關(guān)鍵字2、練習(xí)目標掌握使用filial關(guān)鍵字修飾方法3、需求分析子類可以繼承父類的成員方法,并在必要時對方法進行重寫,增加了方法的擴展的同時也打破了 方法的封裝,如果我們希望父類中的某些方法不能被重寫,這時就可以使用final關(guān)鍵字來修飾。為了 讓初學(xué)者掌握使用final關(guān)鍵字修飾方法,本案例將分別設(shè)計兩個類,
20、一個是Fu類,其中定義了 final 修飾的show()方法,另一個是繼承Fu類的Zi類,在Zi類中對show。方法進行重寫。4、設(shè)計思路(實現(xiàn)原理)1)編寫一個Fu類,類中定義final修飾的show。方法。2)編寫Zi類,Zi類繼承于Fu類,在Z1類中對show。方法進行重寫3)定義測試類Example07,創(chuàng)建Zi類對彖,并調(diào)用Zi類show()方法。二、案例實現(xiàn)1、編寫Fu類及其子類乙類,在Zi類中對show()方法重寫,代碼如下: class Fu /final關(guān)鍵字修飾的方法public final void show()System, out .printin ("這是
21、絕密資源”);class Zi extends Fu /重寫父類中final修飾的方法public void show()System.out.printin (N這是一堆垃圾,給處理了;2、定義測試類Example07,代碼如下:public class Example07(public static void main(String args)Zi z = new Zi();z show();-|g|x|運行結(jié)果如圖47所示。D 二 XsamplePachage hapter04>Javac Example07 JavaExampleR?. jaua:9 :惜誤:Zi中的無法覆丟刊中
22、的shnuO public void sliowO <英奪喜的方法天f inal圖47運行結(jié)果三、案例總結(jié)當一個類的方法被filial關(guān)鍵字修飾后,這個類的子類將不能重寫該方法。案例48 final修飾局部變量案例描述1、考核知識點編號:00104004名稱:final關(guān)鍵字2、練習(xí)目標>掌握使用final關(guān)鍵字修飾局部變量3、需求分析Java中被final修飾的變量為常量,它只能被賦值一次,也就是說final修飾的變量一旦被賦值, 其值不能改變。為了讓初學(xué)者掌握使用filial關(guān)鍵字修飾局部變量,本案例將在類的方法中定義一個 final修飾的局部變量,并試著對該變量重新賦值。4、
23、設(shè)計思路(實現(xiàn)原理)1)編寫一個ExampleOS類,類中定義類一個final修飾的局部變量age,為其賦初始值為18。2)為age重新賦值為20。二、案例實現(xiàn)1、編寫類ExampleOS,代碼如下public class Example08(public static void main(String args)final int age = 18; /第一次可以賦值 age = 20;/再次賦值會報錯編譯錯誤,如圖48所示。-|g|x|D:sanplePackagechapter04>jauac Example08 javaExample08.jaua:4:錯誤:無注為最終變量2。分
24、剋M旳巳=20;再次師值會報錯1個錯誤三、案例總結(jié)final修飾的變量表示常量,一經(jīng)定義就不能重新賦值。案例49 final修飾成員變:、案例描述1、考核知識點編號:00104004名稱:final關(guān)鍵字2、練習(xí)目標掌握使用final關(guān)鍵字修飾成員變量3、需求分析在Java中,final修飾的變量表示常量,一經(jīng)定義就不能重新賦值。為了讓初學(xué)者熟悉final修飾 變量的情況,本案例將使用final關(guān)鍵字修飾成員變量,觀察其是否能夠再次賦值。4、設(shè)計思路(實現(xiàn)原理)1) 編寫一個Fu類,父類中定義一個變量X,并用final關(guān)鍵字修飾變量。2) 編寫Z1類,Zi類繼承于Fu類,在子類中對常量再賦新值
25、。3) 定義測試類Example09,觀察運行結(jié)果。二、案例實現(xiàn)1、編寫Fu類及其子類Z1類,在Z1類中對X再賦值,代碼如下:class Fu /fina 1修飾的變呈,也就是常呈public final int X = 10;class Zi extends Fu X = 20;/在子類中對常雖再賦新值publie void method()(Systemoutprintln(X);2、定義測試類Example09,代碼如下:public class ExampleO9public static void main(String args)Zi z = new Zi();z method()
26、;編譯錯誤,結(jié)果如圖49所示。厚管理員:命令提示奇D =amplcPachac(c Schaptcx'04>Jauac Examplc09 java £xanple09.jaua:6 :錯誤:需X =加;/丿在子類中又A1個錯誤圖49錯誤提示三、案例總結(jié)在本案例中Zi類中對變量X再次賦值,運行結(jié)果報錯。這是因為Java中被final修飾的變量為常量, 它只能被賦值一次,也就是說final修飾的變量一旦被賦值,其值不能改變。如果再次對該變量進行賦值, 則程序會在編譯時報錯。案例4舁0接口的實現(xiàn)案例描述1、考核知識點編 號:00104006名稱:接口2、練習(xí)目標>掌握
27、如何實現(xiàn)接II3、需求分析由于接II中的方法都是抽象方法,因此不能通過實例化對象的方式來調(diào)用接II中的方法。此時需 要定義一個類,并使用miplements關(guān)鍵字實現(xiàn)接I I中所有的方法。為了上初學(xué)者掌握如何實現(xiàn)接I I, 本案例將設(shè)計一個類,使用關(guān)鍵字unplements實現(xiàn)Inter接I中的方法。4、設(shè)計思路(實現(xiàn)原理)1)設(shè)計名為Inter的接I I,接I I中定義一個初始值為20的num常量和method。抽象方法。2)編寫Liter接I I的實現(xiàn)類Interlnipl,使用implements關(guān)鍵字實現(xiàn)接I丨中的方法。3)編寫測試類Example 10,測試類中對接I I的實現(xiàn)類進行
28、實例化,并調(diào)用接I I中的方法。二、案例實現(xiàn)1、編寫接【I Inter, Iiiterlmpl類使用uuplements實現(xiàn)了接口,代碼如卜: /定義一個接口interfaceint num = 20;void method();II使用implements關(guān)鍵字實現(xiàn)接口class Interlmpl implements Inter void show()System out printin(num);public void method()System.out.println ("Interlmpl method11);2、定義測試類Example 10,代碼如下:class E
29、xamplelOpublic static void main(String args)/通過實現(xiàn)類實例化Interlmpl ii = new InterImpl();ii show();ii method();運行結(jié)果如圖4J0所示。D =amplcPachac(c Schaptcx'04>Jaua Example 10 25Interlnpl method圖4-10運行結(jié)果三、案例總結(jié)1、接口使用mterface關(guān)鍵字來定義。2、接II沒有構(gòu)造方法,接II中的變量缺省都是使用public static fhia 1修飾的,即全局常量,接【I中的 方法都是public abst
30、ract修飾的,即抽象方法。3、定義一個類,并使用implements關(guān)鍵字實現(xiàn)接口中的方法,一個類可以實現(xiàn)多個接口。4、由于接II中的方法都是抽彖方法,因此不能直接通過實例化對彖的方式來調(diào)用接II中的方法,需 要在類實現(xiàn)接口后借助類來間接實例化。案例接口的繼承一、案例描述1、考核知識點編 號:00104007名稱:接II的繼承與多實現(xiàn)2、練習(xí)目標掌握接I I繼承的方式及其特點3、需求分析在程序中,可以定義一個接I使用extends關(guān)鍵字去繼承另一個接I I。為了加深初學(xué)者對結(jié)果的理 解,本案例將演示接口與接口、類與接I的繼承和實現(xiàn)關(guān)系。4、設(shè)計思路(實現(xiàn)原理)1)設(shè)計接I I Phone代表
31、傳統(tǒng)手機,在接I I中定義receiveMessagesQ和call()抽彖方法。2)設(shè)計接I I SmailPhone代表智能手機,在接I I中定義faceTimeQ方法,并使用extends關(guān)鍵字繼 承Phone接口,使其具有Phone接口的所有功能。3)設(shè)計類HPhone表示小米手機,類中定義useNCUI()方法,并實現(xiàn)SmartPlione I I的所有方法。4)編寫測試類Examplell,測試類中對NflPhone進行實例化,并訪問小米手機具有的各種功能。二、案例實現(xiàn)1、編寫接 I I Phone 和 SniaitPhone、類 MIPhone。代碼如卜:interface Ph
32、one void receiveMessages();void call();interface SmartPhone extends Phone void faceTime();class MIPhone implements Smar"cPhone publie void receiveMessages()System out prinrln ("接4攵短總;public void call()System out prinrln ("語音通i舌");public void faceTime()System out prinrln ("視頻
33、通i舌");public void useMIUI()System.out.printlnMIUI");2、定義測試類Examplell,代碼如下:public class Example11 public static void main(String args)MIPhone miPhone = new MIPhone();miPhone receiveMessages();miPhone call();miPhone faceTime();miPhone useMIUI();運行結(jié)果如圖4J1所示。武管理員命令提示符-|n|x|anplcPachac(cSchaptc
34、r04>jaua Example 112Jbd04-11運行結(jié)果三、案例總結(jié)接口與接I之間的繼承關(guān)系,可以是單繼承,也可以是多繼承;一個接口可以通過extends關(guān)鍵字繼 承多個接I,接口之間用逗號隔開。案例4舁2 Object類1、考核知識點編號:00104008名稱:Object類2、練習(xí)目標> 了解什么是Object類> 掌握Object類中常用方法的使用3、需求分析在JDK中提供了一個Object類,它是所有類的父類,即每個類都直接或間接繼承自該類。Object 類自身的equalsQ方法比較的是內(nèi)存地址值,相當于“=”,但是在實際開發(fā)中我們很少比較兩個對象 的地址值
35、,這時候常常就需要根據(jù)自身需求來重寫equalsQ方法。為了方便初學(xué)者學(xué)習(xí)Object類,本 案例將演示如何重寫equals。方法。4、設(shè)計思路(實現(xiàn)原理)1)設(shè)計Student類,定義sid變量表示學(xué)號,重寫equals()方法,判斷進行比較的兩個學(xué)生對象學(xué) 號是否相同,相同即為同一個學(xué)生,否則不是。2)編寫測試類Examplel2,創(chuàng)建兩個Student的對彖Lily和Lucy,并分別調(diào)用setter方法為學(xué)號 賦值,最后通過打印語句,輸出這兩個對彖通過“=”和重寫后的equalsQ方法比較后的結(jié)果。二、案例實現(xiàn)1、編寫SUident類,重寫亡quals()方法。代碼如下: class S
36、tudent Student()/學(xué)號private int sid;public void setSid(int sid) this sid = sid;public int getSid()return sid;/我們的需求是學(xué)號相同的人就是同一個人.publie boolean equals(Object obj)/判斷是否為當前對象if (this = obj)return true;/為了呈現(xiàn)的健壯性,加入類型判斷if (!(obj instanceof Student)return false;Student s = (Student) obj;return (this si<
37、;d = s sid);2、定義測試類Examples,為學(xué)號賦值,并打印使用“=”和重寫equals。方法的比較結(jié)果,代碼如F:public class Example12 public static void main(String args)Student Lily = new Student();LilysetSid(200);Student Lucy = new Student();Lucy setSid(200);Systemoutprintln("Lily = LucyH+Htt"+(Lily = Lucy);Systemoutprintln("Li
38、lyequals(Lucy)H+"t"+Li丄yequals(Lucy);運行結(jié)果如圖4J2所示。I宜管理員命令提示符-|n|x|D:sanplePacl<ageSchapter04>Jaud Example 123Lily LucyfalseLiJLy. equals (Lucytrue_i1 圖4J2運行結(jié)果三、案例總結(jié)1、Object類是Java中所有類的父類,每個類都直接或間接繼承自該類。2、Object類中的equalsQ方法比較的是內(nèi)存地址值,和比較結(jié)果一致。底層代碼如下:public boolean equals(Object obj) retur
39、n (this = obj);實際開發(fā)中很少比較內(nèi)存地址值,所以我們常常會根據(jù)自身需求重寫equals。方法。案例4舁3多態(tài)的作用一、案例描述1、考核知識點編 號:00104009名稱:多態(tài)2、練習(xí)目標> 了解多態(tài)的概念、多態(tài)的好處和弊端>掌握如何實現(xiàn)多態(tài)3、需求分析在Java中為了實現(xiàn)多態(tài),允許使用一個父類類型的變量來引用一個子類類型的對彖,根據(jù)被引用 子類對彖特征的不同,得到不同的運行結(jié)果。多態(tài)提高代碼了的擴展性和可維護性。為了幫助初學(xué)者 掌握如何實現(xiàn)多態(tài),本案例將實現(xiàn)一個多態(tài)程序來演示如何實現(xiàn)多態(tài)。4、設(shè)計思路(實現(xiàn)原理)1) 編寫Animal接I,接I中定義sleep()方
40、法。2) Cat類實現(xiàn)Aiuinal接口的方法,并定義另一個方法catcliNIouse()3) 編寫測試類Examples,使Cat對彖指向父類Aiuma 1的引用,并通過該引用調(diào)用sleep。方法。二、案例實現(xiàn)1、編寫Animal接I I及其實現(xiàn)類Cat。代碼如卞:interface Animal void sleep();class Cat implements Animal void catchMouse()System .out p rintln ("抓老鼠");public void sleep()System ou匕println ("I唾覺&quo
41、t;);2、定義測試類Examplel3, Cat對彖指向Animal引用,并使用父類Ammal引用調(diào)用sleep()方法。代 碼如下:public class Example13 public static void main(String args)/多態(tài)Animal animal = new Cat(); animal sleep();運行結(jié)果如圖4-13所示。ca C: XTIIDOVSsystea3ZVend, exe呂回田I: KcamplePackaje chaptef04>jaua Example 13睡覺圖4-13運行結(jié)果三、案例總結(jié)1、多態(tài)是指對象在不同時刻表現(xiàn)出來的
42、不同狀態(tài),在Java中,允許使用一個父類類型的變量來引用 一個子類類型的對象。2、多態(tài)的前提:(1) 要有繼承關(guān)系。(2) 要有方法重寫。(3) 要有父類引用指向子類對彖。3、多態(tài)的好處是提高代碼的擴展性和可維護性。4、多態(tài)的弊端是父類或者接II只能調(diào)用自己具備的成員,不能訪問子類特有的成員。案例4舁4對象的類型轉(zhuǎn)換案例描述1、考核知識點編號:00104010名稱:對象的類型轉(zhuǎn)換2、練習(xí)目標掌握如何實現(xiàn)對彖的類型轉(zhuǎn)換3、需求分析在多態(tài)的學(xué)習(xí)中,涉及到將子類對象當做父類類型使用的情況,這時進行強制類型轉(zhuǎn)換可能會出 現(xiàn)出錯。為了讓初學(xué)者熟悉對象的類型轉(zhuǎn)換,本案例將演示一個子類與父類之間類型轉(zhuǎn)換過程
43、中出現(xiàn) 的錯誤。編寫一個接1 Animal,接口中定義sleep()方法,編寫兩個類CM和Pig分別實現(xiàn)接I I,再編寫一 個測試類Example 14實現(xiàn)對象的類型轉(zhuǎn)換。4、設(shè)計思路(實現(xiàn)原理)1) 編寫Aiunial接口,接口中定義sleep。方法。2 ) Cat類和Pig類分別實現(xiàn)Anunal接I的方法3) 編寫測試類Example對對彖的類型進行轉(zhuǎn)換,使Cat向上轉(zhuǎn)型為Ammal類型,然后再讓Aiunial 類型轉(zhuǎn)換為Pig類型。二、案例實現(xiàn)1、編寫Animal接I I及其實現(xiàn)類Cat。代碼如卞:interface Animal void sleep();class Cat imple
44、ments Animal (public void sleep()System, out .prinrln ("貓晚上睡覺,);class Pig implements Animal (public void sleep ()System, out .prinrln ("豬整天睡覺");2、定義測試類Example 14, Cat對彖指向Animal引用,并使用父類Ammal引用調(diào)用sleep()方法。代 碼如下:public class Example14 public static void main(String args)Animal animal = n
45、ew Cat ();Pig pig = (Pig) animal;pig sleep();運行結(jié)果如圖4J4所示。圖44錯誤提示三、案例總結(jié)1、向下類型轉(zhuǎn)換時,需要注意被轉(zhuǎn)換對彖的真實類型是否和需要轉(zhuǎn)換的對彖類型相同,否則容易報 類型轉(zhuǎn)換異常(java.lang.ClassCastException)o2、Java提供了一個關(guān)鍵字instanceof,它可以判斷一個對象是否為某個類(或接口)的實例或者子類實 例,語法格式如下:對象(或者對象引用變呈)instance"類(或接口)3、進行向上類型轉(zhuǎn)換,子類對彖當做父類類型使用時,不能通過父類變量去調(diào)用子類中某些方法, 否則會拋出編譯異
46、常。案例4舁5匿名內(nèi)部類一、案例描述1、考核知識點編號:00104011名稱:匿名內(nèi)部類2、練習(xí)目標> 了解什么是匿名內(nèi)部類>掌握如何使用匿名內(nèi)部類3、需求分析在學(xué)習(xí)接II時,如果方法的參數(shù)被定義為一個接II類型,那么就需要定義一個類來實現(xiàn)接II。除 此之外,還可以使用匿名內(nèi)部類來實現(xiàn)接II。為了讓初學(xué)者能更好地理解什么是匿名內(nèi)部類,本案例 將演示如何實現(xiàn)一個匿名內(nèi)部類。4、設(shè)計思路(實現(xiàn)原理)1) 設(shè)計一個Inter接I,接I中定義show()和method。方法。2) 設(shè)計一個Outer類,在類的ftmchon()方法中使用匿名內(nèi)部類實現(xiàn)Inter接I】并實例化,并調(diào)用 sho
47、w。和 method。方法。3) 最后編寫一個測試類Example 15,創(chuàng)建Outer的對象并調(diào)用fiinctionQ方法。二、案例實現(xiàn)1、編寫Inter接口及Outer類,使用匿名內(nèi)部類實現(xiàn)接口并創(chuàng)建對象。代碼如下:interface Inter void show();void method();class Outer void function()Inter i = new Inter ()public void show()Systemoutprintin(nshow");public void merhod()Systemout printin ("method
48、*');;i show();i method();2、定義測試類Examplel5o代碼如下:public class Example15 publie static void main(String args)Outer o = new Outer();o function();運行結(jié)果如圖4-15所示。| ca C: MIID01Ssystea3ZXcbd. exe曰回司anplcPacSchaptcr04>jaua Example 15 show netlwd3圖4-15運行結(jié)果三、案例總結(jié)1、匿名內(nèi)部類的格式,具體如下:new父類(參數(shù)列表)或父接口()/匿名內(nèi)部類實現(xiàn)部
49、分2、匿名內(nèi)部類是實現(xiàn)接口的一種簡便寫法,在程序中不一定非要使用匿名內(nèi)部類。3、什么時候使用匿名內(nèi)部類:通常在使用方法是接II類型參數(shù),并該接門中的方法不超過三個時, 可以將匿名內(nèi)部類作為參數(shù)傳遞。4、內(nèi)部類:(1)將一個類E定義在另一個類A的里面,那么B類就稱為內(nèi)部類(嵌套類),內(nèi)部類定義在成員位置 上。(2)內(nèi)部類可以直接訪問外部類中的成員,包括私有成員,而外部類要訪問內(nèi)部類中的成員必須要建 立內(nèi)部類的對象。案例4-16 trycatch語句案例描述1、考核知識點編號:00104012名 稱:try.catch 和 finally2、練習(xí)目標掌握如何使用tiy.catch語句進行異常處理3
50、、需求分析Java中提供了一種對異常進行處理的方式一一異常捕獲,異常捕獲通常使用tiy.catch語句。為 了讓初學(xué)者熟悉tiy.catch語句,本案例將演示如何使用tiy.catch語句處理遍歷時可能出現(xiàn)的數(shù)組角 標越界異常。4、設(shè)計思路(實現(xiàn)原理)1)編寫測試類Example 16,2)在類Example"中定義名為如的int類型一維數(shù)組,遍歷數(shù)組輸出每次遍歷出的值,結(jié)束輸 出 “over"。2)使用try.catch語句處理遍歷時可能出現(xiàn)的數(shù)組角標越界異常,如果出現(xiàn)異常輸出“角標越界”。二、案例實現(xiàn)public class Example16 publie stati
51、c void main(String args)in匕】arr = 1, 2# 3, 4, 5 ;try (for (int x = 0; x <= arr.length; x+)System.out printin(arrx);System, out .printIn ("程序繼續(xù)向下執(zhí)行 ; catch (ArraylndexOutOfBoundsExceprion e) Syste mout prin匕In ("角標越界");System .out p rintln (" over1');運行結(jié)果如圖4-16所示。圖4-16運行結(jié)果三
52、、案例總結(jié)1、心代碼塊中編寫可能發(fā)生異常的Java語句,catch代碼塊中編寫針對異常進行處理的代碼。在try 代碼塊中,發(fā)生異常語句后面的代碼是不會被執(zhí)行的。2、可能發(fā)生多個異常時,可以使用多個tiy.catch或者用一個Uy多個catch。3、Throwable:是異常體系的超類.l-Ei-ror重大的錯誤,這個問題發(fā)生后,一般我們處理不了,一般不處理,而是要程序進行 修正。(內(nèi)存溢出)|-Exception可以處理的問題,這個問題需要我們編寫針對性的代碼進行處理。(異常處理)案例4" Finally語句一、案例描述1、考核知識點編號:00104012名 稱:tiy.catch
53、和 finally2、練習(xí)目標掌握如何使用filially語句3、需求分析在程序中,有時候我們希望有些語句無論程序是否發(fā)生異常都要執(zhí)行,這時就可以在try.catch 語句后,加一,個finally代碼塊。為了讓初學(xué)者熟悉finally代碼塊,本案例將演示如何使用finally語句 來保證不論是否異常都輸出一句話。4、設(shè)計思路(實現(xiàn)原理)1) 編寫 Example 17 類2) 在mam方法中使用trycatchfinally語句,其中tiy語句塊中編寫可能發(fā)生異常的語句10/0, 如果不異常輸出“程序繼續(xù)”,如果異常在catch語句塊中會輸出“出異常類”3) 在finally語句塊中輸出“釋放資源”,保證保證不論是否異常一定輸出此語句二、案例實現(xiàn)public class Example17 public static void main(String args)try System.out.println(10 / 0);/以下3行代碼不執(zhí)行。try中,發(fā)生異常語句后面的代碼是不會被執(zhí)行的System out. printin (”程序繼續(xù)”);Systemexit(0);r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融市場拓展與發(fā)展
- 二零二五年度入學(xué)新生教育法律權(quán)益保障書3篇
- 化妝品銷售保安工作總結(jié)
- 二零二五版小學(xué)校內(nèi)食堂食材供應(yīng)合同3篇
- 二零二五年度商業(yè)廣告攝影師雇傭合同(廣告創(chuàng)意拍攝)3篇
- 二零二五年度農(nóng)業(yè)產(chǎn)品銷售代表渠道拓展勞務(wù)合同
- 2025版旅游行業(yè)數(shù)據(jù)采集與旅游市場分析合同3篇
- 2025版石料場倉儲管理承包服務(wù)協(xié)議3篇
- 二零二五年度社區(qū)老年大學(xué)教學(xué)服務(wù)合同模板3篇
- 二零二五版實習(xí)生勞動合同(含實習(xí)期間加班費計算與支付)3篇
- 2025開工大吉蛇年大吉開門紅模板
- 鍋爐、壓力容器制造質(zhì)量手冊含程序文件-符合TSG07-2019《許可規(guī)則》
- 邏輯思維訓(xùn)練500題(帶答案)
- 2025年日歷表(A4版含農(nóng)歷可編輯)
- 人工智能大模型
- 極簡統(tǒng)計學(xué)(中文版)
- 2024年資格考試-對外漢語教師資格證筆試參考題庫含答案
- 2024年4月自考02382管理信息系統(tǒng)答案及評分參考
- (蘇版)初三化學(xué)上冊:第2單元課題1空氣
- 2023年12月廣東珠海市軌道交通局公開招聘工作人員1人筆試近6年高頻考題難、易錯點薈萃答案帶詳解附后
- 專題23平拋運動臨界問題相遇問題類平拋運和斜拋運動
評論
0/150
提交評論