JAVA程序設計:第6章 Java類設計_第1頁
JAVA程序設計:第6章 Java類設計_第2頁
JAVA程序設計:第6章 Java類設計_第3頁
JAVA程序設計:第6章 Java類設計_第4頁
JAVA程序設計:第6章 Java類設計_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論