




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第十章 繼承,學習目標: 如何聲明父類和子類 用代碼實現(xiàn)繼承 測試繼承的有效性 super與this final關鍵字的使用 abstract關鍵字的使用 接口的定義,繼承概述,有重復成員的類,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類中使用,父類,子類,繼承的定義,繼承:指以原有的類為基礎來創(chuàng)建一個新類,從而實現(xiàn)代碼重用。 被繼承的類是:超類或父類 繼承而來的類是:子類,定義繼
3、承的形式為: 訪問權限class類名 extends父類 ,注意:1、沒有extends,默認父類為Object 2、只有一個父類,即單繼承 3、類繼承具有傳遞性 class A class B extends A class C extends B 其中,B類繼承A類,C類繼承B類,那么C類也間接繼承了A類,繼承的實現(xiàn) 1、java中類是一個層次結構,其中Object類是所有類的根,java中所有的類都直接或者間接繼承Object類 2、子類可以繼承父類的非私有成員變量和非私有方法,但不繼承父類的構造方法。,(注意區(qū)別哪些是可繼承和不可繼承?。?測試繼承,類一次只能繼承一個父類(單繼承) 使
4、用“是一個(is a)”短語驗證繼承 Person和Student的繼承是正確的 一個Student是一個Person,測試繼承,錯誤原因:不滿足“ is a” 短語,正確原因:滿足“ is a” 短語,super是什么,super用來引用父類的實例對象 主要用途: 用于訪問父類中非private的成員變量和成員方法,如: super.variable; super.method(參數列表); (2)用于調用父類的構造方法,如: super(參數列表); 使用時,必須放在第一句!,示例1:在子類成員方法中調用父類成員方法,查看結果:OverTest.java,查看結果:AddTest.java
5、,this是什么?,在每個非靜態(tài)成員方法內部,都有一個this引用變量,指向調用這個方法的實例。 This的真正含義是這個方法所屬的實例的引用變量,this的應用一,讓類的成員變量名和對其進行賦值的成員方法的局部變量同名是必要的,這樣的代碼誰看了都能明白這兩個變量是彼此相關的。見書p125 class Person String name; public Person(String name) name=name; ,=name;,this的應用二,構造方法不能被顯示調用,但是可以在一個構造方法中調用其它重載的構造方法,用this(參數列表)的形式。 此時,先執(zhí)行this表示
6、的構造方法,再執(zhí)行自己。 注意:在調用其它的構造方法的時候,使用this(參數列表)必須是構造方法中的第一條語句,并且在一個構造方法中最多只能調用一個其他的構造方法。,查看結果:Person1.java,位置! 個數!,想一想: 1)為什么this(參數列表)和super(參數列表)不能同時出現(xiàn)在同一個構造方法中? 2)為什么this(參數列表)和super(參數列表)只能作為構造方法中的第一句出現(xiàn)?,子類與父類構造方法的關系,1、在子類的構造方法中可使用語句super(參數列表) 調用父類的構造方法。 2、如果子類的構造方法中沒有顯式調用父類的構造方法,也沒有使用this關鍵字調用重載的其他
7、構造方法, 則在產生子類實例的時候系統(tǒng)會默認調用父類的無參數的構造方法。 3、如果子類的構造方法中沒有顯式調用父類的構造方法,而父類中又沒有定義無參數的構造方法(只有當父類沒有顯式定義任何構造方法時,才會有默認的構造方法),則編譯出錯。,查看結果:Student.java,切記!,因此:我們在定義類的時候,只要定義了有參數的構造方法,通常就還需要定義一個無參數的構造方法。,覆蓋父類的方法,子類可以根據需要對父類中繼承來的方法進行改造這就是方法的覆蓋 覆蓋方法必須和被覆蓋方法具有相同的方法名稱,參數列表和返回值類型 覆蓋方法時,不能使用比父類中被覆蓋方法更嚴格的訪問權限! 如:父類中的方法是pu
8、blic的,子類中覆蓋方法就不能為private的,查看結果:Student.java,final關鍵字,在Java中關鍵字final可以用于修飾類、成員變量和方法 final標記的類不能被繼承。 final標記的方法不能被子類覆蓋。 final標記的變量(成員變量或局部變量)即成為常量,只能賦值一次。,final 關鍵字修飾成員變量,常量:如果變量被標記為final,其結果是使它成為常量,只能被賦值一次。 public class Bank private final double DEFAULT_RATE = 3.2 ; final Box myBox1=new Box(); public
9、 static final int a=20; ,注意: 1、想改變final變量的值會導致一個編譯錯誤。 2、如果將引用類型的變量標記為final,那么該變量不能指向任何其它對象。但可能改變對象的內容,因為只有引用本身是final。,final 關鍵字,方法 final方法無法被覆蓋,即給方法加鎖。 類 final類沒有子類,即不能被繼承。,小結,定義成員變量的格式: 訪問權限 static final 類型 變量名;,abstract關鍵字,用abstract關鍵字 來修飾一個類時,這個類叫做抽象類 abstract類必須被繼承 抽象類不能被實例化 來修飾一個方法時,該方法叫做抽象方法。
10、abstract方法必須被覆蓋 抽象方法只含有聲明,而沒有具體實現(xiàn)。 由于抽象方法沒有實現(xiàn),必須聲明為abstract,格式為 Abstract 返回值類型 方法名(參數列表); 如:abstract void f();,抽象類中的抽象方法,public abstract class SomeAbstractClass public void method1() System.out.println(“Hi, Java”); public abstract void method2(); /抽象方法后加分號 ,抽象類,抽象類定義規(guī)則: 抽象類必須用abstract關鍵字來修飾;抽象方法也必須用
11、abstract來修飾。 抽象類不能被實例化,也就是不能用new關鍵字去產生實例對象,但可以創(chuàng)建抽象類的引用 含有抽象方法的類必須被聲明為抽象類,抽象類的子類如果不是抽象類,就必須覆蓋父類所有的抽象方法后才能被實例化,否則這個子類還是個抽象類。,注意: 1、含有抽象方法的類一定是抽象類 2、抽象類中的方法不一定全部是抽象的,單繼承性和接口,java的單繼承性使得類結構成為以System.Object類為根的一棵樹。,java用接口(interface)來獲得多繼承性。 接口克服了多繼承性帶來的一些問題。,接口的定義,在Java里,設計接口的用意,是為實現(xiàn)多重繼承的一種特殊機制。 接口可以理解為
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)類間多重繼承功能的結構。 通過接口可以實現(xiàn)不相關類的相同行為,而不需考慮這些類之間的層次關系 通過接口可以指明多個類需要實現(xiàn)的方法 接口的語法: interface extends , public static final 數據類型 常量名=常量值; p
13、ublic abstract 返回類型 方法名(參數列表); 接口中所有的方法默認都是public abstract的 接口中的成員變量默認都是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結束 例2: interface J_Shape p
14、ublic abstract void mb_draw(int x,int y); / 接口J_Shape結束,接口(interface),可以定義一個接口用extends關鍵字去繼承一個已有的接口 可以定義一個類用implements關鍵字去實現(xiàn)一個接口中的所有方法 可以去定義一個抽象類用implements關鍵字去實現(xiàn)一個接口中定義的部分方法。 一個類可以繼承一個父類的同時,實現(xiàn)一個或多個接口,extends關鍵字必須位于implements關鍵字之前 。 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)指定接口的全部抽象方法,且方法頭部分要與接口中的定義完全一致(包括返回值,方法名,參數列表)。 如果實現(xiàn)某接口的類是抽象類,則該類的任何一個非抽象的子類必須有它們父類所實現(xiàn)接口的所有抽象方法的方法體。 所有實現(xiàn)接口中的方法必須被申明為public的,接口的實現(xiàn)與接口特點小結,實現(xiàn)一個接口就是要實現(xiàn)該接口的所有方法(抽象類除外) 接口中的方法都是抽象的 多個無關的類可以實現(xiàn)同一個接口 一個類可以實現(xiàn)多個無關的接口,查看結果:Runner.java,package 語句 /0或1個,必須放在文件開始 import語句 /0或多個,必須放在所有類定義之前 public class HelloWroldApp /公共類0或1個 /文件名必須與該類的類名完全相
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自閉癥康復培訓工作總結
- 衛(wèi)生管理基礎知識強化試題及答案
- 光電工程師考試知識點解析試題及答案
- 2024年激光技術考試常見混淆知識點試題及答案
- 企業(yè)調研測試題及答案
- 掌握2024年信息系統(tǒng)項目管理師考試實操能力提升方法試題及答案
- 影城消防培訓
- 2024年專利考試法律知識試題及答案
- 2024年衛(wèi)生管理績效評估試題及答案
- 專利代理人資格考試的復習框架試題及答案
- pu鞋底制作工藝
- PHQ-15軀體癥狀群健康評定量表
- 浙江空氣盒子新材料有限責任公司年產20000噸功能性塑料薄膜及多用途包裝制品項目環(huán)境影響報告
- 電工學(第8版)(上冊 電工技術) 課件全套 秦曾煌 第1-14章 電路的基本概念與基本定律- 傳感器
- 正念減壓療法的神經機制及應用研究述評
- 2023年成都市金牛區(qū)社區(qū)工作者招聘考試真題
- 教師發(fā)展營造積極學習環(huán)境的策略與方法
- 【原創(chuàng)】23祖先的搖籃(第一課時)
- 值日生表格模板
- 膽源性胰腺炎教學查房記錄
- 連鎖酒店采購成本控制問題及對策研究-以如家酒店為例
評論
0/150
提交評論