類的封裝、繼承和多態(tài)ppt課件_第1頁(yè)
類的封裝、繼承和多態(tài)ppt課件_第2頁(yè)
類的封裝、繼承和多態(tài)ppt課件_第3頁(yè)
類的封裝、繼承和多態(tài)ppt課件_第4頁(yè)
類的封裝、繼承和多態(tài)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java程序設(shè)計(jì)實(shí)用教程(第3版,第3章 類的封裝、繼承和多態(tài),3.1 類和對(duì)象 3.2 類的封裝性 3.3 類的繼承性 3.4 類的多態(tài)性 3.5 類的抽象性,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.1 類和對(duì)象,類(class):是既包括數(shù)據(jù)又包括作用于數(shù)據(jù)的一組操作的封裝體。 對(duì)象(object):是類的實(shí)例(instance)。 類具有封裝性、繼承性、多態(tài)性和抽象性。 3.1.1 類 3.1.2 對(duì)象,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.1.1 類,聲明類 類聲明 成員變量的聲明; 成員方法的聲明及實(shí)現(xiàn); 修飾符 class 類 extends 父類 implements 接口列表,類

2、結(jié)構(gòu),Java程序設(shè)計(jì)實(shí)用教程(第3版,3.1.1 類,聲明成員變量和成員方法 聲明成員變量格式: 修飾符 數(shù)據(jù)類型 變量=表達(dá)式 ,變量=表達(dá)式; 聲明成員方法格式: 修飾符 返回值類型 方法(參數(shù)列表) throws 異常類 語(yǔ)句序列; return 返回值;,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.1.1 類,public class MyDate /類聲明 int year,month,day; /成員變量 void set(int y,int m,int d) /成員方法 year=y; /設(shè)置日期值 month=m; day=d;,例3.1 聲明日期類,Java程序設(shè)計(jì)實(shí)用教程(第3

3、版,3.1.1 類,3.成員方法重載 void set(int y,int m,int d) /重載方法,參數(shù)個(gè)數(shù)不同 void set(int m,int d) void set(int d) void set(MyDate d) /重載方法,參數(shù)數(shù)據(jù)類型不同 以下方法是錯(cuò)誤的: void set(int y,int m,int d) void set(int m,int d,int y,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.1.2 對(duì)象,一個(gè)對(duì)象的生命周期是: 創(chuàng)建運(yùn)行消亡。 聲明對(duì)象 類 對(duì)象 MyDate d; 創(chuàng)建實(shí)例 對(duì)象 = new 類的構(gòu)造方法(參數(shù)列表) d=new MyDa

4、te();或 MyDate d=new MyDate(,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.1.2 對(duì)象,3. 引用對(duì)象的成員變量和調(diào)用對(duì)象方法 引用成員變量 對(duì)象.成員變量 如: d.year=2008; 調(diào)用成員方法 對(duì)象.成員方法(參數(shù)列表) 如: d.set(2009,7,28); Java語(yǔ)言回收機(jī)制自動(dòng)釋放對(duì)象。 【例3.1】聲明日期類及使用日期對(duì)象,public class MyDate /類聲明 int year,month,day; /成員變量,表示年、月、日 void set(int y,int m,int d) /成員方法,設(shè)置日期值 /無(wú)返回值,有3個(gè)參數(shù) year

5、= y; month = m; day = d; void set(MyDate d) /將當(dāng)前對(duì)象值設(shè)置為參數(shù)值,重載 set(d.year,d.month,d.day); /調(diào)用重載的同名成員方法 public String toString() /返回中文日期字符串 return year+”年”+month+”月”+day+”日”; public boolean equals(MyDate d) /比較當(dāng)前日期值與d是否相等 return this=d|d!=null /this指代調(diào)用本方法的當(dāng)前對(duì)象,3.1.2 對(duì)象,public static void main(String a

6、rgs) MyDate d1 = new MyDate() ; /聲明對(duì)象,創(chuàng)建實(shí)例,引用賦值 d1.set(2009,7,16); /調(diào)用類的成員方法 MyDate d2 = d1; /對(duì)象引用賦值 System.out.println(“d1:”+d1.toString()+“d2:”+d2.toString()+ ” d1=d2?”+(d1=d2); d2.year=2008; /修改實(shí)例成員變量值 System.out.println(“d1:”+d1+“d2:”+d2+” d1=d2?”+ (d1=d2)+”,d1.equals(d2)?”+(d1.equals(d2); /將對(duì)象轉(zhuǎn)

7、換為字符串,默認(rèn)調(diào)用 d1.toString(); d2=new MyDate(); /創(chuàng)建另一個(gè)實(shí)例 d2.set(d1); System.out.println(“d1:”+d1+“d2:”+d2+” d1=d2?”+ (d1=d2)+”,d1.equals(d2)?”+(d1.equals(d2);,3.1.2 對(duì)象,4. 對(duì)象的引用模型,3.1.2 對(duì)象,Java程序設(shè)計(jì)實(shí)用教程(第3版,5. 對(duì)象的關(guān)系運(yùn)算與比較相等,3.1.2 對(duì)象,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2 類的封裝性,3.2.1 構(gòu)造方法 3.2.2 this引用和instanceof對(duì)象運(yùn)算符 3.2.3 訪問(wèn)

8、控制 3.2.4 靜態(tài)成員 3.2.5 析構(gòu)方法 3.2.6 淺拷貝與深拷貝,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2 類的封裝性,封裝(encapsulation)的含義是:類的設(shè)計(jì)者把類設(shè)計(jì)成一個(gè)黑匣子,使用者只能看見(jiàn)類中定義的公共方法,而看不見(jiàn)方法的實(shí)現(xiàn)細(xì)節(jié),也不能直接對(duì)類中的數(shù)據(jù)進(jìn)行操作。 封裝的目的有: 隱藏類的實(shí)現(xiàn)細(xì)節(jié); 迫使用戶通過(guò)接口去訪問(wèn)數(shù)據(jù); 增強(qiáng)代碼的可維護(hù)性。 封裝的措施有: 構(gòu)造方法、析構(gòu)方法、方法重載、設(shè)置訪問(wèn)控制權(quán)限,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2.1 構(gòu)造方法,聲明及調(diào)用構(gòu)造方法 public class MyDate int year,month,d

9、ay; public MyDate(int y, int m, int d) /聲明構(gòu)造方法 /構(gòu)造方法與類同名,構(gòu)造方法返回該類的一個(gè)實(shí)例 year = y; month = m; day = d; MyDate d = new MyDate(2009,7,18); /對(duì) MyDate d = new MyDate( ); /錯(cuò),Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2.1 構(gòu)造方法,2. 默認(rèn)構(gòu)造方法 public MyDate() /沒(méi)有聲明任何構(gòu)造方法時(shí)系統(tǒng)提供 使用默認(rèn)構(gòu)造方法實(shí)例化對(duì)象時(shí)進(jìn)行初始化約定: 整數(shù)0、浮點(diǎn)數(shù)0.0、字符u0000、布爾false、引用數(shù)據(jù)類型null p

10、ublic class MyDate int year,month,day; public MyDate( ) /聲明構(gòu)造方法 /構(gòu)造方法與類同名,構(gòu)造方法返回該類的一個(gè)實(shí)例 year = 1970; month = 1; day = 1;,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.拷貝構(gòu)造方法,public MyDate(MyDate d) year = d.year; month = d.month; day = d.day; 調(diào)用語(yǔ)句如下: MyDate d1 = new MyDate(2009,7,16); MyDate d2 = new MyDate(d1); 第2句功能相當(dāng)于以下兩句:

11、 MyDate d2 = new MyDate(); d2.set(d1,3.2.1 構(gòu)造方法,Java程序設(shè)計(jì)實(shí)用教程(第3版,4. 構(gòu)造方法重載,public MyDate(int y, int m, int d) public MyDate(int y, int m) public MyDate(int y) public MyDate() public MyDate(MyDate d,3.2.1 構(gòu)造方法,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2.2 this引用和instanceof對(duì)象運(yùn)算符,this引用 指代對(duì)象本身 this 訪問(wèn)本類的成員變量和成員方法 this.成員變量 t

12、his.成員方法(參數(shù)列表) 調(diào)用本類重載的構(gòu)造方法 this(參數(shù)列表) instanceof對(duì)象運(yùn)算符 MyDate d=new MyDate(); d instanceof MyDate,3.2.3 訪問(wèn)控制,類的訪問(wèn)權(quán)限:只有public和缺省兩種 。 public class MyDate class MyDate_ex 類中成員的訪問(wèn)權(quán)限 聲明set()和get()方法存取對(duì)象的屬性,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2.4 靜態(tài)成員,public class MyDate private int year,month,day; /實(shí)例成員變量 private static i

13、nt thisYear; /靜態(tài)成員變量 static /靜態(tài)成員變量初始化 thisYear=2009; public static int getThisYear() /靜態(tài)成員方法 return thisYear; /訪問(wèn)靜態(tài)成員變量,Java程序設(shè)計(jì)實(shí)用教程(第3版,靜態(tài)成員變量的初始化:static /靜態(tài)初始化塊 靜態(tài)成員變量的初始化;【例3.2】封裝的日期類,圖3.3 實(shí)例成員變量與靜態(tài)成員變量的存儲(chǔ)結(jié)構(gòu)不同,3.2.4 靜態(tài)成員,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2.5 析構(gòu)方法,public void finalize() /析構(gòu)方法 語(yǔ)句序列; 作用是:釋放實(shí)例,并執(zhí)行

14、特定的操作。 如:a. finalize(),Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2.6 淺拷貝與深拷貝,1. 淺拷貝,public class Person String name; Mydate birthday; public Person(String name,Mydate birthday) =name; this.birthday=birthday; public Person(Person p) this(, p.birthday);,3.2.6 淺拷貝與深拷貝,2. 深拷貝 有如下的類定義,Person p1=new Person(“李小明”,

15、new Mydate(1979,3,15); Person p2=new Person(p1,3.2.6 淺拷貝與深拷貝,2. 深拷貝 有如下的調(diào)用構(gòu)造方法,public class Person String name; Mydate birthday; public Person(String name,Mydate birthday) =name this.birthday=birthday; public Person(Person p) this(, p.birthday);,3.2.6 淺拷貝與深拷貝,2. 深拷貝,new MyDate(p.birth

16、day,String是常量字符串類,當(dāng)改變一個(gè)對(duì)象時(shí)自動(dòng)創(chuàng)建新的,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.2.6 淺拷貝與深拷貝,2. 深拷貝,例3.3】 使用對(duì)象作為成員變量并實(shí)現(xiàn) 深拷貝的Person類,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.3 類的繼承性,繼承是一種由已有類創(chuàng)建新類的機(jī)制。 3.3.1 由繼承派生類 3.3.2 繼承原則及作用 3.3.3 子類的構(gòu)造方法,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.3.1 由繼承派生類,修飾符 class 類 extends 父類 implements 接口列表 例如: public class Student extends Person St

17、ring speciality; /專業(yè) 【例3.4】 Student類繼承Person類,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.3.1 由繼承派生類,public class Student extends Person String speciality; /專業(yè) public static void main(String args) Person p1=new Person(“李小明”,new Mydate(1979,3,15); Student s1=new Student(); s1.howMany(); System.out.println(“p1:”+p1+“,s1:”+s1)

18、; s1.set(“王江”,Mydate(1987,9,1); System.out.println(s1+“,”+p1.getname()+“比”+ s1.getname()+”大”+p1.olderThen(s1)+”歲”); s1.finalize(); Person.howMany();,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.3.2 繼承原則及作用,繼承原則 子類繼承父類的成員變量 子類繼承父類除構(gòu)造方法以外的成員方法 子類不能繼承父類的構(gòu)造方法 子類可以增加成員,可以重定義從父類繼承來(lái)的成員,但不能刪除它們,2. 繼承的作用,3.3.2 繼承原則及作用,Java程序設(shè)計(jì)實(shí)用教程(第3

19、版,3. Object類,public class Object public Object() /構(gòu)造方法 public String toString() /描述對(duì)象 public boolean equals(Object obj)/比較對(duì)象相等 protected void finalize() throws Throwable Java中的類都是Object的子類 public class Person extends Object,3.3.2 繼承原則及作用,Java程序設(shè)計(jì)實(shí)用教程(第3版,4. 子類對(duì)父類成員的訪問(wèn)權(quán)限,子類不能訪問(wèn)父類的私有成員(private)。 子類能夠訪

20、問(wèn)父類的公有成員(public)和保護(hù)成員(protected)。 子類對(duì)父類的缺省權(quán)限成員的訪問(wèn)控制,以包為界分兩種情況,可以訪問(wèn)當(dāng)前包中成員,3.3.2 繼承原則及作用,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.3.3 子類的構(gòu)造方法,使用super()調(diào)用父類構(gòu)造方法 super(參數(shù)列表) public Student(String name, MyDate birthday, String spec) super(name, birthday); /調(diào)用父類同參數(shù)的構(gòu)造方法 this.speciality = spec; 默認(rèn)執(zhí)行super() public Student() /Jav

21、a提供的默認(rèn)構(gòu)造方法 super(); /調(diào)用父類構(gòu)造方法Person(),Java程序設(shè)計(jì)實(shí)用教程(第3版,3.4 類的多態(tài)性,3.4.1 子類重定義從父類繼承來(lái)的成員 3.4.2 類型的多態(tài) 3.4.3 編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài) 3.4.4 多態(tài)的方法實(shí)現(xiàn),Java程序設(shè)計(jì)實(shí)用教程(第3版,3.4.1 子類重定義從父類繼承來(lái)的成員,多態(tài)(polymorphism)意為一個(gè)名字可具有多種語(yǔ)義。如: +1 1+2 “1”+ “2” 多態(tài)性是面向?qū)ο蟮暮诵奶卣髦弧?主要有方法多態(tài)和類型的多態(tài),Java程序設(shè)計(jì)實(shí)用教程(第3版,3.4.1 子類重定義從父類繼承來(lái)的成員,子類隱藏父類成員變量 子類覆

22、蓋父類成員方法 覆蓋(override)是指子類聲明并實(shí)現(xiàn)父類中 的同名方法并且參數(shù)列表也完全相同。 子類繼承并重載父類成員方法 重載(overload)是指同一個(gè)類中的多個(gè)方法可以同名但參數(shù)列表必須不同。 【例3.5】 Student類重定義從父類繼承來(lái)的成員,this.count super.count,p1.toString(); s2.toString(); s1.finalize(,s2.set(“張曉麗”,new Mydate(1982,4,3); s2.set(“胡東東”,new Mydate(1982,4,3), “電子信息工程”,Java程序設(shè)計(jì)實(shí)用教程(第3版,4. sup

23、er引用,調(diào)用父類的構(gòu)造方法 super(參數(shù)列表) 引用父類同名成員 子類隱藏父類成員變量 super.成員變量 子類覆蓋父類成員方法 super.成員方法(參數(shù)列表,3.4.1 子類重定義從父類繼承來(lái)的成員,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.4.2 類型的多態(tài),子類對(duì)象即是父類對(duì)象 new Student() instanceof Person /true new Person() instanceof Student /false 父類對(duì)象引用子類實(shí)例 Person p=new Student(); Object obj = new Person(); public int olde

24、rThen(Person p) p1.olderThen(s1) s1.olderThen(p1,Person類方法,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.4.3 編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài),編譯時(shí)多態(tài)性 方法重載都是編譯時(shí)多態(tài)。 Person p1 = new Person(李小明, new MyDate(1979,3,15); p1.toString() /執(zhí)行Person類的toString() Student s1= new Student(p1,計(jì)算機(jī)); s1.toString() /執(zhí)行Student類的toString(,2. 運(yùn)行時(shí)多態(tài)性,Person p2 = new Stud

25、ent(張小莉, new MyDate(1989,1,5); /父類對(duì)象引用子類實(shí)例 p2.toString() /執(zhí)行Student類的toString(,父類對(duì)象不能 執(zhí)行子類增加 的成員方法。 如,p2.setSpeciality(“電子信息”,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.4.4 多態(tài)的方法實(shí)現(xiàn),多態(tài)的toString()方法 Object類聲明: public String toString() /返回當(dāng)前對(duì)象的信息字符串 return getClass().getName() + + Integer.toHexString(hashCode();,Java程序設(shè)計(jì)實(shí)用教程(

26、第3版,2. 多態(tài)的equals()方法,Object類聲明: public boolean equals(Object obj) return this = obj; /引用比較,3.4.4 多態(tài)的方法實(shí)現(xiàn),Java程序設(shè)計(jì)實(shí)用教程(第3版,Person類聲明: public boolean equals(Object obj) if(this=obj) return true; if(obj!=null,3.4.4 多態(tài)的方法實(shí)現(xiàn),此處覆蓋Object類的方法,Java程序設(shè)計(jì)實(shí)用教程(第3版,例3.6】在對(duì)象數(shù)組中查找,對(duì)象數(shù)組及計(jì)數(shù) 運(yùn)行時(shí)多態(tài)性體現(xiàn) System.out.printl

27、n(tablei.toString(); indexOf(Object table,Object obj) Oldest(Person table) /getAge()年齡,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.5 類的抽象性,3.5.1 用繼承刻畫(huà)包含關(guān)系 3.5.2 抽象類 3.5.3 最終類,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.5.1 用繼承刻畫(huà)包含關(guān)系,Java程序設(shè)計(jì)實(shí)用教程(第3版,3.5.2 抽象類,聲明抽象類與抽象方法 public abstract class ClosedFigure /閉合圖形抽象類 public abstract double area(); /計(jì)算面積,抽象方法,以分號(hào);結(jié)束,Jav

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論