版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章 繼承,學(xué)習(xí)目標(biāo): 如何聲明父類和子類 用代碼實(shí)現(xiàn)繼承 測(cè)試?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)建一個(gè)新類,從而實(shí)現(xiàn)代碼重用。 被繼承的類是:超類或父類 繼承而來的類是:子類,定義繼
3、承的形式為: 訪問權(quán)限class類名 extends父類 ,注意:1、沒有extends,默認(rèn)父類為Object 2、只有一個(gè)父類,即單繼承 3、類繼承具有傳遞性 class A class B extends A class C extends B 其中,B類繼承A類,C類繼承B類,那么C類也間接繼承了A類,繼承的實(shí)現(xiàn) 1、java中類是一個(gè)層次結(jié)構(gòu),其中Object類是所有類的根,java中所有的類都直接或者間接繼承Object類 2、子類可以繼承父類的非私有成員變量和非私有方法,但不繼承父類的構(gòu)造方法。,(注意區(qū)別哪些是可繼承和不可繼承!),測(cè)試?yán)^承,類一次只能繼承一個(gè)父類(單繼承) 使
4、用“是一個(gè)(is a)”短語驗(yàn)證繼承 Person和Student的繼承是正確的 一個(gè)Student是一個(gè)Person,測(cè)試?yán)^承,錯(cuò)誤原因:不滿足“ is a” 短語,正確原因:滿足“ is a” 短語,super是什么,super用來引用父類的實(shí)例對(duì)象 主要用途: 用于訪問父類中非private的成員變量和成員方法,如: super.variable; super.method(參數(shù)列表); (2)用于調(diào)用父類的構(gòu)造方法,如: super(參數(shù)列表); 使用時(shí),必須放在第一句!,示例1:在子類成員方法中調(diào)用父類成員方法,查看結(jié)果:OverTest.java,查看結(jié)果:AddTest.java
5、,this是什么?,在每個(gè)非靜態(tài)成員方法內(nèi)部,都有一個(gè)this引用變量,指向調(diào)用這個(gè)方法的實(shí)例。 This的真正含義是這個(gè)方法所屬的實(shí)例的引用變量,this的應(yīng)用一,讓類的成員變量名和對(duì)其進(jìn)行賦值的成員方法的局部變量同名是必要的,這樣的代碼誰看了都能明白這兩個(gè)變量是彼此相關(guān)的。見書p125 class Person String name; public Person(String name) name=name; ,=name;,this的應(yīng)用二,構(gòu)造方法不能被顯示調(diào)用,但是可以在一個(gè)構(gòu)造方法中調(diào)用其它重載的構(gòu)造方法,用this(參數(shù)列表)的形式。 此時(shí),先執(zhí)行this表示
6、的構(gòu)造方法,再執(zhí)行自己。 注意:在調(diào)用其它的構(gòu)造方法的時(shí)候,使用this(參數(shù)列表)必須是構(gòu)造方法中的第一條語句,并且在一個(gè)構(gòu)造方法中最多只能調(diào)用一個(gè)其他的構(gòu)造方法。,查看結(jié)果:Person1.java,位置! 個(gè)數(shù)!,想一想: 1)為什么this(參數(shù)列表)和super(參數(shù)列表)不能同時(shí)出現(xiàn)在同一個(gè)構(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)生子類實(shí)例的時(shí)候系統(tǒng)會(huì)默認(rèn)調(diào)用父類的無參數(shù)的構(gòu)造方法。 3、如果子類的構(gòu)造方法中沒有顯式調(diào)用父類的構(gòu)造方法,而父類中又沒有定義無參數(shù)的構(gòu)造方法(只有當(dāng)父類沒有顯式定義任何構(gòu)造方法時(shí),才會(huì)有默認(rèn)的構(gòu)造方法),則編譯出錯(cuò)。,查看結(jié)果:Student.java,切記!,因此:我們?cè)诙x類的時(shí)候,只要定義了有參數(shù)的構(gòu)造方法,通常就還需要定義一個(gè)無參數(shù)的構(gòu)造方法。,覆蓋父類的方法,子類可以根據(jù)需要對(duì)父類中繼承來的方法進(jìn)行改造這就是方法的覆蓋 覆蓋方法必須和被覆蓋方法具有相同的方法名稱,參數(shù)列表和返回值類型 覆蓋方法時(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變量的值會(huì)導(dǎo)致一個(gè)編譯錯(cuò)誤。 2、如果將引用類型的變量標(biāo)記為final,那么該變量不能指向任何其它對(duì)象。但可能改變對(duì)象的內(nèi)容,因?yàn)橹挥幸帽旧硎莊inal。,final 關(guān)鍵字,方法 final方法無法被覆蓋,即給方法加鎖。 類 final類沒有子類,即不能被繼承。,小結(jié),定義成員變量的格式: 訪問權(quán)限 static final 類型 變量名;,abstract關(guān)鍵字,用abstract關(guān)鍵字 來修飾一個(gè)類時(shí),這個(gè)類叫做抽象類 abstract類必須被繼承 抽象類不能被實(shí)例化 來修飾一個(gè)方法時(shí),該方法叫做抽象方法。
10、abstract方法必須被覆蓋 抽象方法只含有聲明,而沒有具體實(shí)現(xiàn)。 由于抽象方法沒有實(shí)現(xiàn),必須聲明為abstract,格式為 Abstract 返回值類型 方法名(參數(shù)列表); 如:abstract void f();,抽象類中的抽象方法,public abstract class SomeAbstractClass public void method1() System.out.println(“Hi, Java”); public abstract void method2(); /抽象方法后加分號(hào) ,抽象類,抽象類定義規(guī)則: 抽象類必須用abstract關(guān)鍵字來修飾;抽象方法也必須用
11、abstract來修飾。 抽象類不能被實(shí)例化,也就是不能用new關(guān)鍵字去產(chǎn)生實(shí)例對(duì)象,但可以創(chuàng)建抽象類的引用 含有抽象方法的類必須被聲明為抽象類,抽象類的子類如果不是抽象類,就必須覆蓋父類所有的抽象方法后才能被實(shí)例化,否則這個(gè)子類還是個(gè)抽象類。,注意: 1、含有抽象方法的類一定是抽象類 2、抽象類中的方法不一定全部是抽象的,單繼承性和接口,java的單繼承性使得類結(jié)構(gòu)成為以System.Object類為根的一棵樹。,java用接口(interface)來獲得多繼承性。 接口克服了多繼承性帶來的一些問題。,接口的定義,在Java里,設(shè)計(jì)接口的用意,是為實(shí)現(xiàn)多重繼承的一種特殊機(jī)制。 接口可以理解為
12、一個(gè)特殊的類,只有常量和抽象方法組成的特殊類。 每個(gè)接口一般也是定義在.java 文件中 public interface Collection int MAX_NUM=100; void add(int a); void delete(int b); int find(int c); int currentCount(); ,接口是用來實(shí)現(xiàn)類間多重繼承功能的結(jié)構(gòu)。 通過接口可以實(shí)現(xiàn)不相關(guān)類的相同行為,而不需考慮這些類之間的層次關(guān)系 通過接口可以指明多個(gè)類需要實(shí)現(xiàn)的方法 接口的語法: interface extends , public static final 數(shù)據(jù)類型 常量名=常量值; p
13、ublic abstract 返回類型 方法名(參數(shù)列表); 接口中所有的方法默認(rèn)都是public abstract的 接口中的成員變量默認(rèn)都是public static final的 接口可以繼承多個(gè)接口,但不能繼承類,示例,例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),可以定義一個(gè)接口用extends關(guān)鍵字去繼承一個(gè)已有的接口 可以定義一個(gè)類用implements關(guān)鍵字去實(shí)現(xiàn)一個(gè)接口中的所有方法 可以去定義一個(gè)抽象類用implements關(guān)鍵字去實(shí)現(xiàn)一個(gè)接口中定義的部分方法。 一個(gè)類可以繼承一個(gè)父類的同時(shí),實(shí)現(xiàn)一個(gè)或多個(gè)接口,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() 方法體 ,注: 如果實(shí)現(xiàn)某接口的類不是抽象類,則類中必須實(shí)現(xiàn)指定接口的全部抽象方法,且方法頭部分要與接口中的定義完全一致(包括返回值,方法名,參數(shù)列表)。 如果實(shí)現(xiàn)某接口的類是抽象類,則該類的任何一個(gè)非抽象的子類必須有它們父類所實(shí)現(xiàn)接口的所有抽象方法的方法體。 所有實(shí)現(xiàn)接口中的方法必須被申明為public的,接口的實(shí)現(xiàn)與接口特點(diǎn)小結(jié),實(shí)現(xiàn)一個(gè)接口就是要實(shí)現(xiàn)該接口的所有方法(抽象類除外) 接口中的方法都是抽象的 多個(gè)無關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口 一個(gè)類可以實(shí)現(xiàn)多個(gè)無關(guān)的接口,查看結(jié)果:Runner.java,package 語句 /0或1個(gè),必須放在文件開始 import語句 /0或多個(gè),必須放在所有類定義之前 public class HelloWroldApp /公共類0或1個(gè) /文件名必須與該類的類名完全相
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療新技術(shù)項(xiàng)目質(zhì)量管理
- 科研機(jī)構(gòu)門窗施工合同協(xié)議書
- 機(jī)場(chǎng)環(huán)衛(wèi)工招聘合同
- 網(wǎng)絡(luò)安全機(jī)電工程管理辦法
- 產(chǎn)業(yè)園區(qū)混凝土招標(biāo)模板
- 節(jié)能改造工程承包合同
- 2025年度新型材料購(gòu)銷合作合同
- 2024年版短租公寓租賃合同3篇
- 2024年特定條款個(gè)人借款合同范本一
- 2024年版技術(shù)開發(fā)合同詳細(xì)條款
- 護(hù)理疑難病例討論造瘺
- 數(shù)字孿生技術(shù)與MES系統(tǒng)的融合
- 人才梯隊(duì)(人才庫、人才盤點(diǎn))建設(shè)方案
- 全國(guó)城市車牌代碼一覽表
- 小區(qū)物業(yè)弱電維護(hù)方案
- 典型地鐵突發(fā)事件應(yīng)急管理案例分析上海地鐵碰撞事故
- 廣西柳州市2023-2024學(xué)年四年級(jí)上學(xué)期期末考試語文試卷
- 《芯片制造工藝》課件
- 中山大學(xué)研究生中特考試大題
- 手術(shù)室護(hù)理實(shí)踐指南術(shù)中低體溫預(yù)防
- 四川省成都市2022-2023學(xué)年六年級(jí)上學(xué)期語文期末考試試卷(含答案)5
評(píng)論
0/150
提交評(píng)論