版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第5章 類的繼承本章知識點繼承的概念和作用子類的聲明類成員修飾符與繼承的關系理解父類和子類的關系,在子類中使用父類成員(方法)繼承機制下,對象創(chuàng)建的過程(構(gòu)造方法的使用,super調(diào)用)子類對父類方法的重寫(super調(diào)用)代碼復用的手段 “is-a” 關系: 類之間是繼承的關系“has-a”關系: 類之間是組合的關系繼承:從已有的類中派生出新的類。新的類能吸收已有類的數(shù)據(jù)屬性和行為并能擴展新的能力舉例:商品5.1.1 繼承的概念父類是子類的一般化,子類是父類的特例化(具體化)。父類也稱為超類或基類。5.1.1 繼承的概念父 類子 類學生研究生、大學生、小學生形狀三角形、圓、矩形雇員教師、醫(yī)生
2、、職員交通工具轎車、卡車、公交車水果蘋果、梨、桃、桔超類/基類父類子類parents/super/basechild/derived繼承分類單繼承:一個子類最多只能有一個父類。多繼承:一個子類可有兩個以上的父類。Java類只支持單繼承,而接口支持多繼承。Java多繼承的功能則是通過接口方式來間接實現(xiàn)的。5.1.1 繼承的概念子類定義的一般格式 類修飾符 class 子類名 extends 父類名 成員變量定義; 成員方法定義;在子類的定義中,用關鍵字extends來明確指出它所繼承的父類。5.1.2 繼承的實現(xiàn)【例5-1】通過繼承Person類派生DeliveryMan類。5.1.2 繼承的實
3、現(xiàn)快遞公司的不同職工職工Person快遞員 DeliveryMan數(shù)據(jù)成員配送區(qū)域deliveryArea獲取配送區(qū)域方法getDeliveryArea()獲取快遞員信息方法getInfo()判斷某區(qū)域是否在配送范圍內(nèi)方法isArrived()要區(qū)分“存在”與“可見”之間的關系。private的成員與其他成員一樣都被繼承到子類中(是存在的),只是它們不能被子類直接使用而已(不可見)。5.1.2 繼承的實現(xiàn)成員訪問控制修飾符在繼承中的性質(zhì)public、private、package、protected父類的public成員可以在父類中使用,也可以在子類使用。程序可以在任何地方訪問public父類
4、成員。父類的private成員僅在父類中使用,在子類中不能被訪問。父類的protected成員可在子類被訪問,無論子類與父類是否存儲在同一個包下。父類的package成員可在同一包的子類中被訪問。5.1.3 類成員的訪問控制子類從父類繼承成員時,父類的所有public、protected、package成員,在子類中都保持它們原有的訪問修飾符。例如,父類的public成員成為子類的public成員。父類的protected成員也會成為子類的protected成員。子類只能通過父類所提供的非private方法來訪問父類的private成員。類A成員的訪問控制符類A對類A成員的訪問權限第三方類對類
5、A成員的訪問權限子類B對類A成員的訪問權限與A同包與A不同包與A同包與A不同包publicprotected默認(package)private5.1.3 類成員的訪問控制【例5-2】分析同包下無繼承關系的類之間成員的訪問控制權限。5.1.3 類成員的訪問控制package chap5.example.access;public class C public int a=1;protected int b=2;int c=3;private int d=4;public int getD()return d;package chap5.example.access;public class A
6、ccessDemo public static void main(String args) C coo = new C();System.out.println(coo.a); System.out.println(coo.b);System.out.println(coo.c);/System.out.println(coo.d); System.out.println(coo.getD();【例5-3】分析不同包下子類對父類成員的訪問控制權限。5.1.3 類成員的訪問控制package chap5.example.access.sub;public class C public int
7、a;protected int b;int c;private int d;public int getD()return d;package chap5.example.access;import chap5.example.access.sub.C;public class AccessDemo extends C public void getInfo()System.out.println(a); System.out.println(b);System.out.println(c);System.out.println(d);Object類:Java中所有類的父類,定義和實現(xiàn)了Jav
8、a系統(tǒng)下所有類的共同行為,所有的類都是由這個類繼承、擴充而來的。認識Object類中的方法5.2 重寫父類方法【例5-4】定義Animal類的子類Bird,并重寫它的move()方法。5.2.1 重寫及其意義public class Animal public void move()System.out.println(我可以move.);public class Bird extends Animalpublic void move()System.out.println(我可以在天空飛翔.);public staticvoid main(String args)Bird bird = ne
9、wBird();bird.move(); /輸出我可以在天空飛翔.方法的重寫遵循“兩同兩小一大”的規(guī)則“兩同”:方法名稱相同、形參列表相同“兩小”子類方法返回值類型父類方法返回值類型子類方法拋出的異常父類方法拋出的異?!耙淮蟆保鹤宇惙椒ǖ脑L問權限父類方法的訪問權限重寫方法時不能改變方法的static或非static性質(zhì)。5.2.1 重寫及其意義Object類中定義了9個方法clone()finalize()toString()equals()hashCode()notify()notifyAll()wait()getClass()5.2.2 Object類與重寫toString()方法【例5-
10、5】在DeliveryMan類中重寫toString方法。5.2.2 Object類與重寫toString()方法public class DeliveryMan extends Person private String deliveryArea;public String toString()String str = getId()+,+getName()+n配送范圍:;int i;for(i=0; ideliveryArea.length-1; i+)/除最后一個外,都有一個逗號str+=deliveryAreai+,;return str+deliveryAreai;【例5-5】在De
11、liveryMan類中重寫toString方法。5.2.2 Object類與重寫toString()方法public class Test public static void main(String args) DeliveryMan dm = new DeliveryMan();dm.setId(007);dm.setName(Bang);dm.setDeliveryArea(new String南鑼鼓巷,煙袋斜街,雨兒胡同,帽兒胡同,黑芝麻胡同);System.out.println(快遞員信息:+dm);【例5-6】利用super調(diào)用父類的同名方法。5.2.3 調(diào)用父類被重寫的方法pu
12、blic class Animal public void move()System.out.println(我可以move.);public class Bird extends Animalpublic void move() super.move();/調(diào)用父類的move()方法System.out.println(我可以在天空飛翔.);public static void main(String args)Bird bird = new Bird();bird.move(); /輸出我可以move我可以在天空飛翔.【例5-7】在Student類中重寫Object的clone()方法,實
13、現(xiàn)Student對象的深復制。5.2.4 Object類的clone()方法與對象的復制Object類中的clone()方法的訪問修飾符是protected,所以不能用下面的方式復制對象。5.2.4 Object類的clone()方法與對象的復制public class Student private String name;private int age;public Student() public Student(String name, int age) = name;this.age = age;public class Test public static vo
14、id main(String args)Student stu1 = new Student(Lucy,15);Student stu2 = null;try /此句報錯stu2 = (Student)stu1.clone(); catch (CloneNotSupportedException e) e.printStackTrace();Test類相對于Student類來講,身份是“第三方類”(既不是Student類本身,也不是Student的子類)clone()方法來自于Object,與Test不同包,所以Test沒有權利訪問Student從Object繼承來的protected修飾的方
15、法。public class Student implements Cloneable / implements Cloneable表示實現(xiàn)Cloneable接口private String name;private int age;public Object clone() /重寫Object類的clone()方法Student stu = null;try stu = (Student)super.clone(); /調(diào)用Object類的clone()功能完成復制 catch (CloneNotSupportedException e) e.printStackTrace();return
16、 stu;5.2.4 Object類的clone()方法與對象的復制public class Test public static void main(String args)Student stu1 = new Student(Lucy,15);Student stu2 = (Student)stu1.clone();System.out.println(stu1);System.out.println(stu2);5.2.4 Object類的clone()方法與對象的復制5.2.4 Object類的clone()方法與深、淺復制淺復制001zhang堆內(nèi)存teacher1001zhang堆
17、內(nèi)存teacher1001zhang5.2.4 Object類的clone()方法與深、淺復制深復制001zhang堆內(nèi)存teacher1001zhang堆內(nèi)存teacher1001zhangteacher1【例】向Student中組合一個Teacher類的引用成員。實現(xiàn)深復制時,如果對象中包含引用成員,則該引用成員所屬類也需要重寫clone()方法。在復制對象時,再單獨復制引用成員所指對象。5.2.4 Object類的clone()方法與深、淺復制請思考下面代碼的運行結(jié)果是什么?public class Test public static void main(String args)Tea
18、cher teacher = new Teacher(Grace);Student stu1 = new Student(Lucy,15, teacher);Student stu2 = (Student)stu1.clone();stu1.getTeacher().setName(Kenzo);System.out.println(stu1:+stu1);System.out.println(stu2:+stu2);淺復制代碼改進如下:public class Teacher implements Cloneablepublic Object clone()/重寫clone方法Teacher
19、 tea = null;try tea = (Teacher)super.clone(); catch (CloneNotSupportedException e) e.printStackTrace();return tea;深復制public class Student implements Cloneablepublic Object clone()Student stu = null;try stu = (Student)super.clone(); catch (CloneNotSupportedException e) e.printStackTrace();/復制引用成員所指對象
20、this.teacher = (Teacher)stu.getTeacher().clone(); return stu;深復制繼承下的構(gòu)造方法的調(diào)用次序子類構(gòu)造方法在執(zhí)行自己的任務之前,將顯式地(通過super引用)或隱式地(調(diào)用父類默認的無參數(shù)構(gòu)造方法)調(diào)用其直接父類的構(gòu)造方法。類似地,如果父類派生于另一個類,則要求父類的構(gòu)造方法調(diào)用上一級類的構(gòu)造方法,依此類推。調(diào)用請求中,最先調(diào)用的一定是Object類的構(gòu)造方法。創(chuàng)建對象的過程:先父后子。5.3 子類對象的構(gòu)造【例5-8】已知圓Circle橢圓Ellipse形狀Shape的繼承關系,查看Circle對象構(gòu)建的過程。5.3.1 子類對象的
21、構(gòu)造過程public class Shape private String name;public Shape() System.out.println(Shape().);public class Ellipse extends Shapeprivate double a; /短軸private double b; /長軸public Ellipse() System.out.println(Ellipse().);public class Circle extends Ellipsepublic Circle() System.out.println(Cicle().);為了避免錯誤,父類
22、中至少定義一個無參的構(gòu)造方法。子類不會繼承父類的構(gòu)造方法,但是子類可以調(diào)用父類的構(gòu)造方法,如同一個類的構(gòu)造方法可以用this()調(diào)用自己的重載構(gòu)造方法一樣。子類調(diào)用父類構(gòu)造方法使用super()完成。5.3.2 super與this調(diào)用構(gòu)造方法構(gòu)造方法調(diào)用的過程(1)子類構(gòu)造方法的第一行使用super()顯式調(diào)用父類的構(gòu)造方法,編譯系統(tǒng)根據(jù)super的實參列表調(diào)用對應的父類構(gòu)造方法。(2)子類構(gòu)造方法的第一行使用this()顯式調(diào)用本類重載的構(gòu)造方法,編譯系統(tǒng)根據(jù)this的實參列表調(diào)用對應的本類構(gòu)造方法。執(zhí)行本類另一個構(gòu)造方法時會顯式或隱式地調(diào)用父類的構(gòu)造方法。(3)如果子類構(gòu)造方法中既沒有super調(diào)用,也沒有this調(diào)用,系
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度臨時用工工作滿意度調(diào)查及改進協(xié)議4篇
- 二零二五年度宿舍安全管理宿管員聘用協(xié)議范本3篇
- 二零二五年度ISO 22000食品安全管理體系認證咨詢協(xié)議3篇
- 二零二五年度商業(yè)地產(chǎn)項目配套場地租賃服務協(xié)議2篇
- 二零二五年度外資企業(yè)外籍員工聘用協(xié)議范本3篇
- 2025年度文化旅游項目募集資金三方監(jiān)管合同4篇
- 2025年度豬圈建造與生物安全防護合同4篇
- 2025年度生物制藥研發(fā)合作協(xié)議
- 二零二五年度城市綠化用地承包合同范本4篇
- 2025年智能車輛識別一體機銷售與服務合同范本4篇
- 纖維增強復合材料 單向增強材料Ⅰ型-Ⅱ 型混合層間斷裂韌性的測定 編制說明
- 習近平法治思想概論教學課件緒論
- 寵物會展策劃設計方案
- 孤殘兒童護理員(四級)試題
- 梁湘潤《子平基礎概要》簡體版
- 醫(yī)院急診醫(yī)學小講課課件:急診呼吸衰竭的處理
- 腸梗阻導管在臨床中的使用及護理課件
- 調(diào)料廠工作管理制度
- 小學英語單詞匯總大全打印
- 衛(wèi)生健康系統(tǒng)安全生產(chǎn)隱患全面排查
- GB/T 15114-2023鋁合金壓鑄件
評論
0/150
提交評論