




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第六章Java類設計本章內容Java類的繼承方法的重載、重寫多態性及其應用成員訪問控制對象的創建和初始化細節幾種常用的Java類類的繼承 (1) 為描述和處理個人信息,定義類Person:public class Person public String name; public int age; public Date birthDate; public String getInfo() .Person+name : String +age : int+birthDate : Date+getInfo() : String類的繼承 (2) 為描述和處理學生信息,定義類Student:publ
2、ic class Student public String name; public int age; public Date birthDate; public String school; public String getInfo() .Student+name : String +age : int+birthDate : Date+school : String+getInfo() : String類的繼承 (3) 通過繼承,簡化Student類的定義:public class Person public String name; public int age; public Da
3、te birthDate; public String getInfo() .public class Student extends Person public String school; public String getInfor public void show() public void show(int t)Person+name : String +age : int+birthDate : Date+getInfo() : StringStudent+school : String繼承對象的生成Student st=new Student();0600ststptrPubli
4、c String getInfor()nameageBirthDatestptrPublic String getInfor()nameageBirthDateSchoolstptrPublic String getInfor()nameageBirthDatePublic String getInfor()SchoolstptrPublic String getInfor()nameageBirthDatePublic String getInfor()Public void show()Public void show(int a)SchoolstptrPublic String getI
5、nfor()nameageBirthDatePublic String getInfor()Public void show()Public void show(int a)School類的繼承 (4)類繼承語法規則: class extends * Object類是所有Java類的最高層父類Java只支持單繼承,不允許多重繼承一個子類只能有一個父類一個父類可以繼承出多個子類單繼承舉例Person+name : String +age : int+birthDate : Date+getInfo() : StringStudent+school : StringSoldierOfficerGr
6、aduate+major : history+register() : voidJava 類的訪問權限訪問控制修飾符同一個類同一個包派生類外部privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes可以對Java類中定義的屬性和方法進行訪問控制-規定不同的保護等級:Public classdefault classpublicclassclasspublic classdefault classpublicclassdefault classpublic classpublicdefaultclassPublic classpubl
7、ic訪問控制舉例(1)class Parent private int f1 = 1; int f2 = 2; protected int f3 = 3; public int f4 = 4; private void fm1() System.out.println(in fm1() f1= + f1); void fm2() System.out.println(in fm2() f2= + f2); protected void fm3() System.out.println(in fm3() f3= + f3); public void fm4() System.out.printl
8、n(in fm4() f4= + f4);訪問控制舉例(2)(0601)class Child extends Parentprivate int c1 = 21;public int c2 = 22; private void cm1()System.out.println(in cm1() c1= + c1);public void cm2()System.out.println(in cm2() c2= + c2);public static void main(String args)int i; Parent p = new Parent();i = p.f2; /i = p.f3;
9、i = p.f4;p.fm2(); /p.fm3();p.fm4();Child c = new Child();i = c.f2; /i = c.f3;i = c.f4;i = c.c1; /i = c.c2;c.cm1();c.cm2();訪問控制分析f1_privatef2_defaultc2_publicf3_protectedf4_publicc1_private內存空間中子類對象攜帶的數據子類的對象可以調用的方法fm2()_defaultfm3()_ protectedfm4()_ publiccm2()_publiccm1()_private父類Parent和子類Child在同一
10、包中定義時:方法的重寫(0603)在子類中可以根據需要對從父類中繼承來的方法進行改造-方法的重寫重寫方法必須和被重寫方法具有相同的方法名稱、參數列表和返回值類型重寫方法不能使用比被重寫方法更嚴格的訪問權限(0603)方法重寫舉例(1) public class Person protected String name;protected int age;protected Date birthDate; /java.util包中定義過類Datepublic String getInfo() return Name: + name + n +age: + age; public class St
11、udent extends Person protected String school;public String getInfo() return Name: + name + nage: + age + nschool: + school; 方法重寫舉例(2)public class Parent public void method1() public class Child extends Parent private void method1() /illegalpublic class UseBoth public void doOtherThing() Parent p1 =
12、new Parent();Child p2 = new Child();p1.method1();p2.method1();關鍵字super在Java類中使用super來引用父類的成分super可用于訪問父類中定義的屬性super可用于調用父類中定義的成員方法super可用于在子類構造方法中調用父類的構造方法super的追溯不僅于直接父類關鍵字super舉例 public class Person private String name; private int age; private Date birthDate; public String getInfo() return Name:
13、+ name + nage: + age; public class Student extends Person private String school = New Oriental;public String getSchool() return school; public String getInfo() / 調用父類的方法 return super.getInfo() +nschool: +school; stptrPublic String getInfor()nameageBirthDatePublic String getInfor()Public void show()P
14、ublic void show(int a)Schoolps多態性(1)多態-在Java中,父類對象的指針可以指向它的所有繼承類。一個對象只能有一種確定的數據類型一個引用類型變量可能指向(引用)多種不同類型的對象Person p = new Student();Object o = new Person();o = new Student(); 多態性(2)一個引用類型變量如果聲明為父類的類型,但實際引用的是子類對象,那么該變量就不能再訪問子類中添加的屬性和方法Student m = new Student();m.school = pku; /合法Person e = new Student
15、(); 虛方法調用 (Virtual Method Invocation) 正常的方法調用 Person e = new Person(); e.getInfo(); Student e = new Student(); e.getInfo(); 虛擬方法調用(多態情況下) Person e = new Student(); e.getInfo(); 編譯時類型和運行時類型編譯時多態重載來實現運行時多態虛方法來調用Dt.javainstanceof 操作符(0607)public class Person extends Object public class Student extends
16、Person public class Graduate extends Person -public void method1(Person e) if (e instanceof Student) / 處理Student類型及其子類類型對象 else if (e instanceof Graduate) /處理Graduate類型及其子類類型對象 else /處理Person類型對象對象造型 (Casting )對Java對象的強制類型轉換稱為造型在造型前可以使用instanceof操作符測試一個對象的類型從子類到父類的類型轉換可以自動進行從父類到子類的類型轉換必須通過造型(強制類型轉換)
17、實現無繼承關系的引用類型間的轉換是非法的對象造型舉例public class Test /Person及Student類的定義見第17頁 public void method(Person e) System.out.pritnln(e.getschool(); /非法 if(e intstanceof Student) Student me = (Student)e; System.out.pritnln(me.getschool(); public static void main(Stirng args) Test t = new Test(); Student m = new Stud
18、ent(); t.method(m); 方法名重載 在同一個類中可以定義多個同名方法-方法名重載public class PrintStreampublic void println(int i) public void println(float f) public void println(String s) 重載方法的參數列表必須不同 重載方法的返回值類型可以相同,也可以不同構造方法重載(0608)構造方法重載舉例: public class Personpublic Person(String name, int age, Date d) public Person(String na
19、me, int age) public Person(String name, Date d) 構造方法重載,參數列表必須不同可以在構造方法的第一行使用this關鍵字調用其它(重載的)構造方法構造方法重載舉例public class Person private String name; private int age; private Date birthDate; public Person(String name, int age, Date d) = name; this.age = age; this.birthDate = d; public Person(St
20、ring name, int age) this(name, age, null); public Person(String name, Date d) this(name, 30, d); public Person(String name) this(name, 30); 構造方法不能繼承子類繼承父類所有的成員變量和成員方法,但不繼承父類的構造方法一旦顯式定義了構造方法,則系統不再提供默認構造方法調用父類構造方法(0609)在子類的構造方法中可使用super(argument_list)語句調用父類的構造方法如果子類的構造方法中沒有顯示地調用父類構造方法,也沒有使用this關鍵字調用重載
21、的其它構造方法,則系統默認調用父類無參數的構造方法如果子類構造方法中既未顯式調用父類構造方法,而父類中又沒有無參的構造方法,則編譯出錯調用父類構造方法舉例 (1)1 public class Person 2 3 private String name;4 private int age;5private Date birthDate;67 public Person(String name, int age, Date d) 8 = name;9 this.age = age;10 this.birthDate = d;11 12 public Person(String
22、 name, int age) 13 this(name, age, null);14 15 public Person(String name, Date d) 16 this(name, 30, d);17 18 public Person(String name) 19 this(name, 30);2021 / 22 調用父類構造方法舉例 (2)1 public class Student extends Person 2 private String school;34 public Student(String name, int age, String s) 5 super(na
23、me, age);6 school = s;7 8 public Student(String name, String s) 9 super(name);10 school = s;11 12 public Student(String s) / 編譯出錯: no super()13 school = s;14 15 對象構造和初始化細節分配存儲空間并進行默認的初始化按下述步驟初始化實例變量綁定構造方法參數如有this()調用,則調用相應的重載構造方法,然后跳轉到步驟5顯式或隱式追溯調用父類的構造方法(Object類除外)進行實例變量的顯式初始化操作執行當前構造方法的方法體構造和初始化對象舉
24、例public class Object public Object() .public class Person extends Object private String name; private int age = 0; private Date birthDate; public Person(String n, Date d) / implicit super();name = n;birthDate = d; public Person(String n) this(n, null); public class Student extends Person private Str
25、ing school; public Student(String n, String d) super(n); school = d; Ex2 初始化過程引申 public class Person private String name; private int age = 0; private Date birthDate; private String info; public Person(String n, Date d) /step 3 name = n; birthDate = d; info = getInfo(); public Person(String n) this(
26、n, null); /step 2 public String getInfo() return Name: + name + nage: + age + nBirth Date: + birthDate; public class Student extends Person private String school; public Student(String n, String d) /step 0 super(n); /step 1 school = d; public String getInfo() /step 4 return super.getInfo() + nSchool
27、: + school; Object 類Object類是所有Java類的根父類如果在類的聲明中未使用extends關鍵字指明其父類,則默認父類為Object類 public class Person .等價于:public class Person extends Object .=操作符與equals方法=操作符與equals方法的區別:引用類型比較引用;基本類型比較值;equals()方法只能比較引用類型,=可以比較引用類型及基本類型;特例:當用equals()方法進行比較時,對類File、String、Date及封裝類(Wrapper Class)來說,是比較類型及內容而不考慮引用的是否是同一個實例;用=進行比較時,符號兩邊的數據類型必須一致(可自動轉換的基本數據類型除外),否則編譯出錯;=操作符與equals方法舉例class TestEqual
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機肥料在提升土壤微生物對作物生長調節物質產生中的作用考核試卷
- 簡易呼吸器的使用 2
- 靜脈血液標本采集指南
- 遼寧輕工職業學院《大學生創新創業與就業指導》2023-2024學年第一學期期末試卷
- 洛陽職業技術學院《計算機網絡管理與安全》2023-2024學年第二學期期末試卷
- 江蘇省啟東市2024-2025學年高三下學期第二次模擬考試(期中)數學試題含解析
- 江蘇電子信息職業學院《大學生職業生涯規劃與就業指導(二)》2023-2024學年第二學期期末試卷
- 期貴州省畢節市重點中學2025屆初三第一次質量檢測試題物理試題含解析
- 遼寧省丹東33中學2024-2025學年初三下學期模擬(二)測試英語試題含答案
- XX學校課程改革與校本課程開發實施匯報范文
- 山東省臍帶血合同協議
- 2025-2030全球及中國自主汽車芯片行業市場現狀供需分析及市場深度研究發展前景及規劃可行性分析研究報告
- 四川宜賓環球集團有限公司招聘筆試題庫2025
- 浙江國企招聘2025杭州蕭山環境投資建設集團有限公司招聘12人筆試參考題庫附帶答案詳解
- 湖北省武漢市六校聯考2024-2025學年高二下學期4月期中考試化學試題(含答案)
- 小學藏文基礎知識課件下載
- 美術合作協議書合同模板
- 大學英語四級考試2024年6月真題(第1套)閱讀
- 第十五講新時代與中華民族共同體建設2012- -中華民族共同體概論專家大講堂課件
- 廣東省深圳市名校聯考2023-2024學年高一下學期數學期中考試試題(含答案)
- 中國革命戰爭的戰略問題(全文)
評論
0/150
提交評論