java基礎(chǔ)教程 (10).ppt_第1頁
java基礎(chǔ)教程 (10).ppt_第2頁
java基礎(chǔ)教程 (10).ppt_第3頁
java基礎(chǔ)教程 (10).ppt_第4頁
java基礎(chǔ)教程 (10).ppt_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論