版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、面向?qū)ο蟮母呒壋绦蛟O計,伍淳華 北京郵電大學計算機學院,Java,2INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,所有類都是Object的子類; Object obj=new BackAccount(); Object obj=new String(“Hello”);,Java,3INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,equals方法 toString方法 clone方法 在自己編寫的類中,最好重寫這些方法!,Java,4INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,equals方法 public boole
2、an equals(Object obj) return (this = obj); 判斷兩個對象是否具有相同的引用,Java,5INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,equals方法 class BankAccount public boolean equals(Object obj) BankAccount other=(BankAccount)obj; return (accountNumber=other.accountNumber if(obj=null) return false; if(getClass()!=obj.getClass() ret
3、urn false; BankAccount other=(BankAccount)obj; return (accountNumber=other.accountNumber SavingAccount other=obj; return /比較SavingAccount中的成員變量 ,Java,9INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,Java語言規(guī)范要求equals方法具有下面的特性 1)自反性:對于任何非空引用x,x.equals(x)應該返回true; 2)對稱性:對于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也
4、應該返回true; 3)傳遞性:對于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也應該返回true; 4)一致性:如果x和y引用的對象沒有發(fā)生變化,那么反復調(diào)用x.equals(y)應該返回同樣的結果; 5)對于任意非空引用x,x.equals(null)應該返回false;,Java,10INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,注意: class BankAccount public boolean equals(BankAccount obj) if(this=obj) retur
5、n true; if(obj=null) return false; if(getClass()!=obj.getClass() return false; return (accountNumber=obj.accountNumber if(obj=null) return false; if(!(obj instanceof BankAccount) return false; BankAccout other=(BankAccount) obj; return (accountNumber=other.accountNumber 如果由超類決定相等的概念,則可以使用instanceof進
6、行檢測,這樣可以在不同子類的對象之間進行相等的比較.,Java,13INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,hashCode方法 hasCode方法返回一個整型數(shù)值,并合理地組合實例域的散列碼,以便能夠讓各個不同的對象產(chǎn)生的散列碼更加均勻; 如果x.equals(y)返回true,那么x.hashCode()就必須與y.hashCode()具有相同的值; 如果重新定義equals方法,就必須重新定義hashCde方法; Object類的hashCode()方法返回對象的存儲地址;,Java,14INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object
7、類,hashCode方法 class BankAccount public int hashCode() return 7*Integer(accountNumber).hashCode() +11*Double(balance).hashCode(); ,Java,15INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,toString方法 返回對象的字符串表示; Object類中默認返回對象所屬的類名和散列碼. System.out.println(System.out); 輸出:java.io.PrintStreama90653,Java,16INTRODUCTION
8、-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,toString方法 重寫toString方法一般遵循的格式為: 類名成員變量值 java.awt.Pointx=20,y=20 BankAccout中的toString函數(shù)可改寫為: public String toString() retrun “BankAccoutbalance=“+balance+ ”,accountNumber=“+accountNumber+”; ,Java,17INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,toString方法 public String toString() retrun
9、 getClass.getName()+”balance=“+balance+”,accountNumber=“+accountNumber+”; ,Java,18INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,繼承object類,toString方法 class SavingAccount extends BankAccount public String toString() retrun super.toString()+”interest=“+interest+”; ,Java,19INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口代碼重用 Eg : DataSet,J
10、ava,20INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口代碼重用 如果想計算一組BankAccount對象中余額的最大值和平均值?,Java,21INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口代碼重用 public class DataSet . . . public void add(BankAccount x) sum = sum + x.getBalance(); if (count = 0 | maximum.getBalance() x.getBalance() maximum = x; count+; public BankAccount getM
11、aximum() return maximum; private double sum; private BankAccount maximum; private int count; ,Java,22INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口代碼重用 public class DataSet . . . public void add(Student x) sum = sum + x.getScore(); if (count = 0 | maximum.getScore() x.getBalance() maximum = x; count+; public Stude
12、nt getMaximum() return maximum; private double sum; private Student maximum; private int count; ,Java,23INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口代碼重用 X的數(shù)據(jù)類型; 如果每個對象實現(xiàn)一個getMeasure方法來提供測量的內(nèi)容,就可實現(xiàn)一個可重用的DataSet,以add()方法為例: sum = sum + x.getMeasure(); if (count = 0 | maximum.getMeasure() x.getMeasure() maximum = x
13、; count+; X的數(shù)據(jù)類型應該是什么? -X的數(shù)據(jù)類型可以是任意實現(xiàn)了getMeasure( )的類。,Java,24INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口代碼重用 接口可用來規(guī)范類的行為 public interface Measurable double getMeasure(); DataSet可以返回一組對象中值最大的那個對象,并計算出這一組對象的平均值,但要求對象所屬的類必須實現(xiàn)了Measurable接口。,Java,25INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口代碼重用 接口可用來規(guī)范類的行為 public interface Me
14、asurable double getMeasure(); DataSet可以返回一組對象中值最大的那個對象,并計算出這一組對象的平均值,但要求對象所屬的類必須實現(xiàn)了Measurable接口。,Java,26INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,public class DataSet . . . public void add(Measurable x) sum = sum + x.getMeasure(); if (count = 0 | maximum.getMeasure() x.getMeasure() maximum = x; count+; public Me
15、asurable getMaximum() return maximum; private double sum; private Measurable maximum; private int count; ,Java,27INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口VS 類 接口中所有的方法都是抽象的,即有方法名,方法參數(shù),返回值,但沒有方法體; 接口中的方法的訪問限制權限都是public; 接口中沒有成員變量,但可以有常量;,Java,28INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,實現(xiàn)接口 用關鍵詞implements來標識一個類實現(xiàn)了某個接口; pub
16、lic class BankAccount implements Measurable public double getMeasure() return balance; / Additional methods and fields 類可以實現(xiàn)多個接口; -類必須完成其實現(xiàn)的所有接口中的所有方法;,Java,29INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口使得類和類之間的藕合度減少; Eg: DataSet、BankAccount和Student的UML圖 -矩形框表示一個類,矩形框中如果有interface表示一個接口; -虛線加上一個空的三角形箭頭表示”is-a”關系
17、; -虛線加上一個箭頭表示”uses”關系;,Java,30INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,使用接口前的UML圖,Java,31INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,使用接口后的UML圖,Java,32INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口定義語法 public interface InterfaceName / method signatures Example: public interface Measurable double getMeasure(); 注:接口中的方法體自動為public,Java,33INTRO
18、DUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,類實現(xiàn)接口語法 public class ClassName implements InterfaceName, InterfaceName, . / methods / instance variables Example: public class BankAccount implements Measurable / Other BankAccount methods public double getMeasure() / Method implementation ,Java,34INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口
19、,如果想用DataSet類返回一組Country對象中人口最多的一個對象,Country類應該滿足什么條件? 可否將DataSet類的 public void add(Measurable x)方法的參數(shù)類型改為Object?,Java,35INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口和類的互換 DataSet bankData=new DataSet(); bankData.add(new BankAccount(1100); public void add(Measurable x) 如果一個類實現(xiàn)了某個接口,則將該類轉(zhuǎn)換為該接口是正確的,而且不需要強制轉(zhuǎn)換;,Java,
20、36INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口和類的互換 DataSet bankData=new DataSet(); bankData.add(new BankAccount(1100); bankData.add(new BankAccount(2100); bankData.add(new BankAccount(2100); Measurable m=bankData.getMaxium(); m.deposit(3000); /上面的語句是非法的,Java,37INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口和類的互換 接口轉(zhuǎn)換為某個實現(xiàn)了該接口的
21、類,需要用強制轉(zhuǎn)換 BankAccount m=(BankAccout)bankData.getMaxium(); m.deposit(3000);,Java,38INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口與多態(tài) 接口不能實例化 Measurable m=new Measuable(); /wrong! 一個對象只能是實現(xiàn)了該接口的某個類的實例 Measurable x;x = new BankAccount(10000);x = new Studnet( “Jack); 調(diào)用對象的方法 x.getMeasure(); ?調(diào)用了哪個方法,Java,39INTRODUCTIO
22、N-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口與多態(tài) 接口可實現(xiàn)運行時的多態(tài),在運行階段,由對象的實際類型決定調(diào)用哪一個具體的方法 -如果x是一個BankAccount對象,則調(diào)用BankAccount.getMeasure(); -如果x是一個Student對象,則調(diào)用Student.getMeasure();,Java,40INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,接口與回調(diào)(callback) Measurable接口的限制 -只能對用戶自己編寫的類實現(xiàn)該接口,不適用系統(tǒng)自帶的類 -測量形式比較簡單。 回調(diào):一種常見的程序設計模式??梢灾赋瞿硞€特定事件發(fā)生時應該采取的動作。 改
23、寫Measurable -在前面的DataSet實現(xiàn)中,測量的實現(xiàn)依賴于調(diào)用該方法的對象; -改進:將需要測量的對象傳遞給一個測量方法: public interface Measurer double measure(Object anObject); ,Java,41INTRODUCTION-1,class DataSet private double sum; private Object maximum; private int count; private Measurer measurer;/添加測量器對象 ,Java,42INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,
24、修改后的add() 方法 public void add(Object x) sum = sum + measurer.measure(x); if (count = 0 | measurer.measure(maximum) measurer.measure(x) maximum = x; count+; ,Java,43INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,可以定義一個測量器對相關類的對象進行任何形式的測量 public class RectangleMeasurer implements Measurer public double measure(Object an
25、Object) Rectangle aRectangle = (Rectangle) anObject; double area = aRectangle.getWidth() * aRectangle.getHeight(); return area; (rectangle是系統(tǒng)自帶的類,表示一個矩形) ,Java,44INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,將測量器傳給一個DataSet對象 Measurer m = new RectangleMeasurer(); DataSet data = new DataSet(m);data.add(new Rectangle(
26、5, 10, 20, 30);data.add(new Rectangle(10, 20, 30, 40);System.out.println(“Average area=” + data.getAverage(); Rectangle max= (Rectangle)data.gatMaximum(); System.out.println(“Maximum area rectangle=”+max);,Java,45INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,(在面向?qū)ο笤O計時,需要降低類與類之間的耦合性),Java,46INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,接口,示例程序1 DataSetTest,Java,47INTRODUCTION-1,面向?qū)ο蟾呒壋绦蛟O計,內(nèi)部類,對于一些用途很有限的類,可將其放在要使用的方法內(nèi); public class DataSetTester public static void main(Stri
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人辭職申請書薦
- 《JF公司采購管理流程優(yōu)化研究》
- 2024至2030年中國龍門裁剪機數(shù)據(jù)監(jiān)測研究報告
- 《基于心理契約的低年資護士離職傾向的相關研究》
- 2024至2030年中國鋁伸縮節(jié)行業(yè)投資前景及策略咨詢研究報告
- 國慶安全培訓企業(yè)強勁復產(chǎn)考核試卷
- 2024至2030年中國軟膜卡套行業(yè)投資前景及策略咨詢研究報告
- 《大理市智慧旅游業(yè)發(fā)展研究》
- 個人學生檢討書錦集七篇
- 2024款二手車買賣協(xié)議格式
- 五年級上冊道德與法治說課稿-3 主動拒絕煙酒與毒品 部編版
- 術后譫妄的預防及護理
- 二次函數(shù)專題知識點-常考(典型)題型-重難點題型(含詳細答案)
- 2024年壓電陶瓷傳感片項目可行性研究報告
- 統(tǒng)編四上《中國古代神話故事》導讀課教學設計含反思
- 高級管理招聘面試題及回答建議(某大型央企)2024年
- 汽車行業(yè)MES解決方案相關兩份資料
- 《涂裝工程安全設計規(guī)范》-噴漆室
- 身體評估-神經(jīng)系統(tǒng)評估(健康評估課件)
- 融資租賃并購重組中的法律合規(guī)與風險管理
- 醫(yī)師執(zhí)業(yè)、變更執(zhí)業(yè)、多機構備案申請審核表
評論
0/150
提交評論