版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第十章 繼承,學(xué)習(xí)目標(biāo): 如何聲明父類和子類 用代碼實現(xiàn)繼承 測試?yán)^承的有效性 super與this final關(guān)鍵字的使用 abstract關(guān)鍵字的使用 接口的定義,繼承概述,有重復(fù)成員的類,public class Person public String name; public int age; public int getInfo() public class Student public String name; public int age; public int getInfo() public String schoolName; public void study() ,p
2、ublic class Person public String name; public int age; public int getInfo() public class Student extends Person public String schoolName; public void study() ,Person Student,繼承使得Person類的所有可繼承的變量和方法(區(qū)分哪些是可繼承,哪些是受限制),都可以在Student類中使用,父類,子類,繼承的定義,繼承:指以原有的類為基礎(chǔ)來創(chuàng)建一個新類,從而實現(xiàn)代碼重用。 被繼承的類是:超類或父類 繼承而來的類是:子類,定義繼
3、承的形式為: 訪問權(quán)限class類名 extends父類 ,注意:1、沒有extends,默認(rèn)父類為Object 2、只有一個父類,即單繼承 3、類繼承具有傳遞性 class A class B extends A class C extends B 其中,B類繼承A類,C類繼承B類,那么C類也間接繼承了A類,繼承的實現(xiàn) 1、java中類是一個層次結(jié)構(gòu),其中Object類是所有類的根,java中所有的類都直接或者間接繼承Object類 2、子類可以繼承父類的非私有成員變量和非私有方法,但不繼承父類的構(gòu)造方法。,(注意區(qū)別哪些是可繼承和不可繼承?。?測試?yán)^承,類一次只能繼承一個父類(單繼承) 使
4、用“是一個(is a)”短語驗證繼承 Person和Student的繼承是正確的 一個Student是一個Person,測試?yán)^承,錯誤原因:不滿足“ is a” 短語,正確原因:滿足“ is a” 短語,super是什么,super用來引用父類的實例對象 主要用途: 用于訪問父類中非private的成員變量和成員方法,如: super.variable; super.method(參數(shù)列表); (2)用于調(diào)用父類的構(gòu)造方法,如: super(參數(shù)列表); 使用時,必須放在第一句!,示例1:在子類成員方法中調(diào)用父類成員方法,查看結(jié)果:OverTest.java,查看結(jié)果:AddTest.java
5、,this是什么?,在每個非靜態(tài)成員方法內(nèi)部,都有一個this引用變量,指向調(diào)用這個方法的實例。 This的真正含義是這個方法所屬的實例的引用變量,this的應(yīng)用一,讓類的成員變量名和對其進(jìn)行賦值的成員方法的局部變量同名是必要的,這樣的代碼誰看了都能明白這兩個變量是彼此相關(guān)的。見書p125 class Person String name; public Person(String name) name=name; ,=name;,this的應(yīng)用二,構(gòu)造方法不能被顯示調(diào)用,但是可以在一個構(gòu)造方法中調(diào)用其它重載的構(gòu)造方法,用this(參數(shù)列表)的形式。 此時,先執(zhí)行this表示
6、的構(gòu)造方法,再執(zhí)行自己。 注意:在調(diào)用其它的構(gòu)造方法的時候,使用this(參數(shù)列表)必須是構(gòu)造方法中的第一條語句,并且在一個構(gòu)造方法中最多只能調(diào)用一個其他的構(gòu)造方法。,查看結(jié)果:Person1.java,位置! 個數(shù)!,想一想: 1)為什么this(參數(shù)列表)和super(參數(shù)列表)不能同時出現(xiàn)在同一個構(gòu)造方法中? 2)為什么this(參數(shù)列表)和super(參數(shù)列表)只能作為構(gòu)造方法中的第一句出現(xiàn)?,子類與父類構(gòu)造方法的關(guān)系,1、在子類的構(gòu)造方法中可使用語句super(參數(shù)列表) 調(diào)用父類的構(gòu)造方法。 2、如果子類的構(gòu)造方法中沒有顯式調(diào)用父類的構(gòu)造方法,也沒有使用this關(guān)鍵字調(diào)用重載的其他
7、構(gòu)造方法, 則在產(chǎn)生子類實例的時候系統(tǒng)會默認(rèn)調(diào)用父類的無參數(shù)的構(gòu)造方法。 3、如果子類的構(gòu)造方法中沒有顯式調(diào)用父類的構(gòu)造方法,而父類中又沒有定義無參數(shù)的構(gòu)造方法(只有當(dāng)父類沒有顯式定義任何構(gòu)造方法時,才會有默認(rèn)的構(gòu)造方法),則編譯出錯。,查看結(jié)果:Student.java,切記!,因此:我們在定義類的時候,只要定義了有參數(shù)的構(gòu)造方法,通常就還需要定義一個無參數(shù)的構(gòu)造方法。,覆蓋父類的方法,子類可以根據(jù)需要對父類中繼承來的方法進(jìn)行改造這就是方法的覆蓋 覆蓋方法必須和被覆蓋方法具有相同的方法名稱,參數(shù)列表和返回值類型 覆蓋方法時,不能使用比父類中被覆蓋方法更嚴(yán)格的訪問權(quán)限! 如:父類中的方法是pu
8、blic的,子類中覆蓋方法就不能為private的,查看結(jié)果:Student.java,final關(guān)鍵字,在Java中關(guān)鍵字final可以用于修飾類、成員變量和方法 final標(biāo)記的類不能被繼承。 final標(biāo)記的方法不能被子類覆蓋。 final標(biāo)記的變量(成員變量或局部變量)即成為常量,只能賦值一次。,final 關(guān)鍵字修飾成員變量,常量:如果變量被標(biāo)記為final,其結(jié)果是使它成為常量,只能被賦值一次。 public class Bank private final double DEFAULT_RATE = 3.2 ; final Box myBox1=new Box(); public
9、 static final int a=20; ,注意: 1、想改變final變量的值會導(dǎo)致一個編譯錯誤。 2、如果將引用類型的變量標(biāo)記為final,那么該變量不能指向任何其它對象。但可能改變對象的內(nèi)容,因為只有引用本身是final。,final 關(guān)鍵字,方法 final方法無法被覆蓋,即給方法加鎖。 類 final類沒有子類,即不能被繼承。,小結(jié),定義成員變量的格式: 訪問權(quán)限 static final 類型 變量名;,abstract關(guān)鍵字,用abstract關(guān)鍵字 來修飾一個類時,這個類叫做抽象類 abstract類必須被繼承 抽象類不能被實例化 來修飾一個方法時,該方法叫做抽象方法。
10、abstract方法必須被覆蓋 抽象方法只含有聲明,而沒有具體實現(xiàn)。 由于抽象方法沒有實現(xiàn),必須聲明為abstract,格式為 Abstract 返回值類型 方法名(參數(shù)列表); 如:abstract void f();,抽象類中的抽象方法,public abstract class SomeAbstractClass public void method1() System.out.println(“Hi, Java”); public abstract void method2(); /抽象方法后加分號 ,抽象類,抽象類定義規(guī)則: 抽象類必須用abstract關(guān)鍵字來修飾;抽象方法也必須用
11、abstract來修飾。 抽象類不能被實例化,也就是不能用new關(guān)鍵字去產(chǎn)生實例對象,但可以創(chuàng)建抽象類的引用 含有抽象方法的類必須被聲明為抽象類,抽象類的子類如果不是抽象類,就必須覆蓋父類所有的抽象方法后才能被實例化,否則這個子類還是個抽象類。,注意: 1、含有抽象方法的類一定是抽象類 2、抽象類中的方法不一定全部是抽象的,單繼承性和接口,java的單繼承性使得類結(jié)構(gòu)成為以System.Object類為根的一棵樹。,java用接口(interface)來獲得多繼承性。 接口克服了多繼承性帶來的一些問題。,接口的定義,在Java里,設(shè)計接口的用意,是為實現(xiàn)多重繼承的一種特殊機(jī)制。 接口可以理解為
12、一個特殊的類,只有常量和抽象方法組成的特殊類。 每個接口一般也是定義在.java 文件中 public interface Collection int MAX_NUM=100; void add(int a); void delete(int b); int find(int c); int currentCount(); ,接口是用來實現(xiàn)類間多重繼承功能的結(jié)構(gòu)。 通過接口可以實現(xiàn)不相關(guān)類的相同行為,而不需考慮這些類之間的層次關(guān)系 通過接口可以指明多個類需要實現(xiàn)的方法 接口的語法: interface extends , public static final 數(shù)據(jù)類型 常量名=常量值; p
13、ublic abstract 返回類型 方法名(參數(shù)列表); 接口中所有的方法默認(rèn)都是public abstract的 接口中的成員變量默認(rèn)都是public static final的 接口可以繼承多個接口,但不能繼承類,示例,例1: 通過接口定義一些常量 public interface J_Constants public static final int ONE = 1; public static final int TWO = 2; public static final int THREE = 3; / 接口J_Constants結(jié)束 例2: interface J_Shape p
14、ublic abstract void mb_draw(int x,int y); / 接口J_Shape結(jié)束,接口(interface),可以定義一個接口用extends關(guān)鍵字去繼承一個已有的接口 可以定義一個類用implements關(guān)鍵字去實現(xiàn)一個接口中的所有方法 可以去定義一個抽象類用implements關(guān)鍵字去實現(xiàn)一個接口中定義的部分方法。 一個類可以繼承一個父類的同時,實現(xiàn)一個或多個接口,extends關(guān)鍵字必須位于implements關(guān)鍵字之前 。 public class A extends B implements C, D ,接口示例,interface Collection
15、 int MAX_NUM=100; void add(int a); void delete(int b); int find(int c); int count(); class TestCollection implements Collection public void add(int a) 方法體 public void delete(int b) 方法體 public int find(int c) 方法體 public int count() 方法體 ,注: 如果實現(xiàn)某接口的類不是抽象類,則類中必須實現(xiàn)指定接口的全部抽象方法,且方法頭部分要與接口中的定義完全一致(包括返回值,方法名,參數(shù)列表)。 如果實現(xiàn)某接口的類是抽象類,則該類的任何一個非抽象的子類必須有它們父類所實現(xiàn)接口的所有抽象方法的方法體。 所有實現(xiàn)接口中的方法必須被申明為public的,接口的實現(xiàn)與接口特點小結(jié),實現(xiàn)一個接口就是要實現(xiàn)該接口的所有方法(抽象類除外) 接口中的方法都是抽象的 多個無關(guān)的類可以實現(xiàn)同一個接口 一個類可以實現(xiàn)多個無關(guān)的接口,查看結(jié)果:Runner.java,package 語句 /0或1個,必須放在文件開始 import語句 /0或多個,必須放在所有類定義之前 public class HelloWroldApp /公共類0或1個 /文件名必須與該類的類名完全相
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機(jī)械設(shè)備維修合同書
- 專職工作者調(diào)崗申請書范文(5篇)
- 2024年教育資源共享平臺教師資源共享與培訓(xùn)合同3篇
- 入職合同承諾保證
- 三分鐘正能量演講稿范文六篇
- 租車服務(wù)合同模板
- 新版知識產(chǎn)權(quán)抵押借款合同
- 鋼質(zhì)進(jìn)戶門購銷合同
- 房屋宅基地買賣合同的格式模板
- 運動服飾購銷協(xié)議
- 大眾頂級 輝騰 減振控制的空氣懸架_圖文
- 血液透析專科操作流程及評分標(biāo)準(zhǔn)
- 電工新技術(shù)介紹(課堂PPT)
- 座板式單人吊具(課堂PPT)
- 托班一日生活情況反饋表
- 機(jī)電設(shè)備維護(hù)保養(yǎng)技術(shù)
- FLAC3D常用命令
- JGJ_T231-2021建筑施工承插型盤扣式鋼管腳手架安全技術(shù)標(biāo)準(zhǔn)(高清-最新版)
- 畢業(yè)論文(設(shè)計)除雪車工作裝置設(shè)計
- 鏡片加工知識之四研磨
- 核電站1E級電氣設(shè)備鑒定標(biāo)準(zhǔn)技術(shù)經(jīng)驗
評論
0/150
提交評論