Java的繼承、多態(tài)、高級(jí)類特性和數(shù)組_第1頁(yè)
Java的繼承、多態(tài)、高級(jí)類特性和數(shù)組_第2頁(yè)
Java的繼承、多態(tài)、高級(jí)類特性和數(shù)組_第3頁(yè)
Java的繼承、多態(tài)、高級(jí)類特性和數(shù)組_第4頁(yè)
Java的繼承、多態(tài)、高級(jí)類特性和數(shù)組_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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、第5章Java的繼承、多態(tài)、高級(jí)類特性和數(shù)組1. 2節(jié)介紹了部分Java語(yǔ)言的面向?qū)ο蟮幕咎匦訨ava語(yǔ)言程口設(shè)計(jì)5.1概述我們需要熟悉的常用基本類:Object類、Class類、String類Object類是Java類庫(kù)所有類的根類。即,我們?cè)贘ava程序中看到、用到的所有類都是 從Object類派生的,都是Object類的子類Java語(yǔ)言程序設(shè)計(jì)1. 1 Ob ject 類Object的兩個(gè)常用方法:) toString。方法默認(rèn)顯示 類名對(duì)象的hash值);通常重寫該方法,顯示編程者想輸出的信息) equals (Object obj)方法對(duì)于非字符串,用于判斷兩個(gè)對(duì)象是否相同, 即兩

2、個(gè)變量是否指向同一個(gè)對(duì)象(在內(nèi)存中的地 址是否相同);對(duì)于字符串,判斷兩個(gè)字符串是否相同通常用于在程序執(zhí)行期間幫助加載新的類Java語(yǔ)言程療設(shè)計(jì)5. 1. 3 String類Java語(yǔ)言沒(méi)有表示字符串的基本數(shù)據(jù)類型,使用 String類代替。1. 3 String類.字符串的表示1)字符串常量的表示使用雙引號(hào)”作分隔符,可用于初始化字 符串對(duì)象。例:String sl = Java”;String s2=6tstudent*?;Java對(duì)每一個(gè)字符串常量自動(dòng)生成一個(gè) String類實(shí)例,因此字符串常量可以直接調(diào)用 String類的方法。如:intlength = Are you student

3、?”.length。;Java語(yǔ)言程用設(shè)計(jì)5. 1. 3 String類2)用String類表示字符串可利用String類的構(gòu)造方法生成空串例:String e = new String();可通過(guò)字符數(shù)組或字節(jié)數(shù)組生成字符串對(duì)象 (以后討論)5. 1. 3 String類3.字符串的修改、連接和替換1)字符串連接String strl = abc” ;String str2 = strl.concat( cde);/str2= abccde”相當(dāng)于 String str2= strl + “cde” ;2)替換子串String str3 = str2. replace (,33 ):/ st

4、r3 = ab3333de” ;String str3 = str2. replace( uccn ,33 ):/ str3 = ab33de”;5. 1. 3 String類3.字符串的修改、連接和替換3)提取子串String str2 = abccde;String s = str2. substring(1, 5);/ s= bccd” ;注意:字符串的字符順序號(hào)是從0開(kāi)始的,對(duì)于例子 中的str2,第0個(gè)字符是a,第5個(gè)字符是%,; substring。1,山)是從指定字符串的第n個(gè)字符開(kāi) 始截取子串到第山個(gè),其中不包括第m個(gè)Java語(yǔ)言程中設(shè)計(jì)5. 1. 3 String類4.字符串

5、比較s- equals (t);比較字符串S與t的內(nèi)容是否相同。不能以S=t比較!如果某個(gè)子基盤靠瀛類中的某個(gè)方 法有相同的名稱、返回類型和參數(shù),但功能不同(方法的具體實(shí)現(xiàn)不同),則稱這個(gè)方法覆蓋了它的父類方法。方法覆蓋條件:成員名稱相同;參數(shù)個(gè)數(shù)、類型、順序相同;返回值類型相同;靜態(tài)方法只能覆蓋為靜態(tài)方法;訪問(wèn)屬性的要求:覆蓋的方法必須提供與被覆蓋方法一樣的訪問(wèn) 權(quán)限。例一個(gè)簡(jiǎn)單的方法覆蓋的例子 class A voidf() System.out初利n(”調(diào)用 A.f()”);Jvoid h() System.out.printin(調(diào)用 A.h()M);class B extends v

6、oidf( System.out.printin(調(diào)用 B.f()M);子類成員將父類 中同名的非私有 成員覆蓋(屏蔽)了??稍谧宇惖姆椒ㄖ惺褂胹uper.f()調(diào)用父類的方法,不帶super使用子類的父類中的訪問(wèn)屬性子類中的覆蓋方法訪問(wèn)屬性publicpublicprotectedpubli c 或 p rotected默認(rèn)不能是privateJava語(yǔ)言程序設(shè)計(jì)例一個(gè)簡(jiǎn)單的方法覆蓋的例子public class Example public static void main(String args) A.a = new A();B.b = new B();a.f();a.h();b.f()

7、;Java語(yǔ)言程嚀設(shè)計(jì)方法的重載翻妻嘉麟個(gè)名稱相同、但 參數(shù)不同的方法。Java虛擬機(jī)能根據(jù)傳遞給方法的參數(shù),自動(dòng)選擇合適的重載方法。重載的簡(jiǎn)單例子public class testpublic static void main(String args) System.out.println(max(4,3);System.out.println(max(5,7,2);)static int max (int a , int b ) return a b ? a : b ; 兩個(gè)同名的方法,但是參數(shù)個(gè)數(shù)不同ostatic int max (int a , int b, int c ) int

8、t;t = max ( a , b ); return max (t, c );)Java語(yǔ)言程序設(shè)計(jì)5.4高級(jí)類特性聲明一個(gè)類的變量或方法為Static時(shí), 意味著該變量或方法是類變量或類方法,與 任何對(duì)象無(wú)關(guān)。Java語(yǔ)言程中設(shè)計(jì)5. 4. 1 static關(guān)鍵字static修飾的變量是僅屬于類的靜態(tài)域。靜態(tài)域是類中每個(gè)對(duì)象共享的域。它們 是類的域,不屬于任何一個(gè)類的具體對(duì)象。 是一個(gè)公共的存儲(chǔ)單元,任何一個(gè)類的對(duì)象訪問(wèn)它時(shí),取到的都是相同的數(shù)值,同樣任何一個(gè)類的對(duì)象去修改它時(shí),也都是在對(duì)同一個(gè)內(nèi)存單元做操作。static修飾的方法稱為靜態(tài)方法:CD static的方法是屬于整個(gè)類的,它在

9、內(nèi)存中的代碼段將隨著類的定義而分配和裝載,不被任何一個(gè)對(duì)象專有;(2)由于static方法是屬于整個(gè)類的,所以它不能操縱和處理屬于某個(gè)對(duì)象的成員變量(即不能訪問(wèn)實(shí)例變量),而只能處理屬于整個(gè)類的成員變量。Java語(yǔ)言程序設(shè)計(jì)端去1 static關(guān)鍵字瓦特?cái)?shù)class Light int wattage;boolean indicator; 開(kāi)關(guān)String location; 位置/static 變量static int counter; 創(chuàng)建燈管對(duì)象編號(hào)Light() 默認(rèn)構(gòu)造方法wattage = 50;indicator = true;location = X;+counter; 計(jì)數(shù)器

10、增量“static 方法public static void writeCount()System.out.println(,fNumber of lights:0 + counter);/ System.outprintln(uNumber of lights: counter);此行編譯錯(cuò)誤5. 4. 1 static關(guān)鍵字例5.8 cont.public class Warehousepublic static void main(StringO args)Light.writeCount();用類名調(diào)用Light aLight = new Light(); 創(chuàng)建一個(gè)對(duì)象System.o

11、ut.printlnfValue of counter/1 + Light.counter);通過(guò)類名訪問(wèn)Light bLight = new Light。; 倉(cāng)U建另一個(gè)對(duì)象 bLight.writeCount();利后引用調(diào)用Light cLight = new Light。; 再倉(cāng)ij建一個(gè)對(duì)象System.out. printing Value of counter: + cLight.counter);轉(zhuǎn)行處里通過(guò)引用訪問(wèn)iis仃結(jié)果:)Number of lights:0Value of counter;1Number of lights:2 Value of counter:3.

12、Java語(yǔ)言程序設(shè)計(jì)5. 4. 2 final關(guān)鍵字最終類如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為abstract的,又被聲明為final。被定義成final的類,通常是一些有特殊作用的、用來(lái)完成標(biāo)準(zhǔn)功能的類,將一個(gè)類定義為final則可以將它的內(nèi)容、屬性和功能固定下來(lái),與它的類名形成穩(wěn)定的映射關(guān)系,從 而保證引用這個(gè)類時(shí)所實(shí)現(xiàn)的功能是準(zhǔn)確無(wú)誤的。5. 4. 2 final關(guān)鍵字 最終域final修飾的域稱為最終域,實(shí)際上就是Java中的常量。使用時(shí)應(yīng)注意:(1)需要說(shuō)明常量的數(shù)據(jù)類型;(2)需要同時(shí)指出常量的具體取值;(3)因?yàn)?/p>

13、類的所有對(duì)象的常量成員,其數(shù)值都固定一致,為節(jié)省空間,常量通常聲明為static。Java語(yǔ)言程療設(shè)計(jì)5. 4. 2 final關(guān)鍵字最終方法用final修飾符修飾的方法,其功能和內(nèi)部語(yǔ)句不能再更改, 不能再被繼承。所有被private修飾符限定為私有的方法以及所有包含在 final類中的方法,都默認(rèn)為是final的??陀^世界里,許多概念是抽象對(duì)象,這種概念的類沒(méi)有 實(shí)例。例如:車是抽象類,沒(méi)有具體事物可對(duì)應(yīng)??陀^世界 只有汽車,火車,自行車等。Java中,不能實(shí)例化的類稱為抽象類。抽象類必須被繼承,其方法必須被重寫。抽象類的聲明:abstract class抽象類名)抽象類中可以聲明方法,稱

14、為抽象方法。抽象方法只 需聲明,無(wú)需實(shí)現(xiàn);抽象類不能被實(shí)例化,抽象類不一定要 包含抽象方法。若類中包含了抽象方法,則該類必須被定義 為抽象類。Java語(yǔ)言程序設(shè)計(jì)5. 4. 4抽象類例 5. 10 AbstractClassTest. java abstract class Person /抽象類的聲明,不能實(shí)例化 public Person(String n) name = n;public abstract String getDescriptionO;沒(méi)有方法體的抽象方法,即只說(shuō)明了這個(gè)方法的存在,由子類來(lái)實(shí)現(xiàn)public String getNameO /所有子類的通用方法,獲取“人”

15、的姓名 return name;)private String name; /任何“人”都具有的屬性:姓名例 5. 10 cont. AbstractClassTest. javaclass Employee extends Person/繼承抽象類Person, Employee具有Person的所有屬性和方法 public Employee (String n, double s, int year, int month, int day) super (n); /調(diào)用父類的構(gòu)造方法 salary = s; /Emplyee特有的工資屬性,因此不能在父類中聲明 )public String

16、 getDescriptionO /實(shí)現(xiàn)父類聲明過(guò)的抽象方法 return String format (公司雇員,年薪是%. 2f” , salary);)Java語(yǔ)言程序設(shè)計(jì)5. 4. 4抽象類例 5. 10 cont. AbstractClassTest. javaclass Student extends Person 繼承抽象類Personpublic Student (String n, String m) super (n); /調(diào)用父類的構(gòu)造方法major = m; /Student特有的專業(yè)屬性,因此不能在父類中聲明 )public String getDescription

17、O /實(shí)現(xiàn)父類聲明過(guò)的抽象方法 return String “大學(xué)生,專業(yè)是“ + major + “0 ”;)private String major;例 5. 10 cont. AbstractClassTest. javapublic class AbstractClassTest public static void main (String args) Person people = new Person2/Person的類型是 peoplepeople0 = new Employee (, 50000, 1989,10, 1);創(chuàng)建Employee對(duì)豪,賦值給people0,為什么

18、不是people的對(duì)象? peopletl = new Student(“李明”,“計(jì)算機(jī)科學(xué)”);/前建Employee對(duì)象,賦值給peoplefor ( Person p: people)System. out. printin (p. getName () + + p. getDescription();)運(yùn)行結(jié)果:張浩,公司雇員,年薪是 50000. 0(h李明,大學(xué)生,專業(yè)是計(jì)算機(jī)科學(xué)。Java語(yǔ)言程存設(shè)計(jì)5. 4.5 接口接口的目的:實(shí)現(xiàn)多繼承并簡(jiǎn)化其復(fù)雜性。主要功能:1)不管類的層次,不同的類可以有相同的接口。 接口只聲明方法,但不實(shí)現(xiàn)方法。2) 一個(gè)類可實(shí)現(xiàn)許多接口,但只有一個(gè)

19、父類3)接口可以了解對(duì)象的交互界面(方法),無(wú) 需了解對(duì)象所對(duì)應(yīng)的類。5. 4.5 接口什么東西會(huì)飛?父類:動(dòng)物父類:交通工具接口:會(huì)飛翔子類:小鳥(niǎo) 子類:飛機(jī)Java語(yǔ)言程序設(shè)計(jì)5. 4.5 接口1聲明接口接口修飾符interface接口名extends父類名 方法原型聲明或常量。常量定義格式為:type NAME=value;該常量被實(shí)現(xiàn)該接口的多個(gè)類共享;具有public,final, static的屬性。:方法體定義格式為:(具有public和abstract屬性)returnType methodName(paramlist);5. 4.5 接口1聲明接口例:public inter

20、face StockWatcher 接 口聲明final String sunTicker = MSUNWM;final String oracleTicer = ORCL; 常量聲明final String ciscoTicer = CSC?!?void value Changed(String tickerSymbol,double new Value); 方法聲明Java語(yǔ)言程存設(shè)計(jì)5. 4.5 接口2實(shí)現(xiàn)接口接口只有抽象方法,不能實(shí)例化,要使用接口,必須定義類。語(yǔ)法:public class類名 implements接口名數(shù)據(jù)接口方法)股票接口實(shí)現(xiàn)代碼:public class Sto

21、ckApplet extends Applet implements StockWatcher public void valueChanged(String tickerSymbol, double new Value) if (tickerSymbol.equals(sunTicker) .else if (tickerSymbol.equals(oracleTicker).包含了方法的else if (tickerSymbol.equals(ciscoTicker) .) 具體實(shí)現(xiàn)3接口作為類型的使用public class StockMonitorpublic void watchSt

22、ock(StockWatcherwatcher5String tickerSymbol,double delta)Java語(yǔ)言程存設(shè)計(jì)5. 4.5 接口3接口作為類型的使用public class StockMonitorpublic void watchStock(StockWatcherwatcher,StringtickerSymbol,double delta). 接口名作名參數(shù)的類型 意味著:我們不關(guān)心對(duì)象所對(duì)應(yīng)的類,只關(guān)心它是否具有接口所聲明的方法例:interface CanFight void fight。;interface CanSwim void swim();inter

23、face CanFly void fly();class ActionCharacter public void fight() )class Hero extends Actioncharacter implements CanFight,CanSwim, CanFlypublic void swim()public void fly()Java語(yǔ)菖程中設(shè)計(jì)5. 4.5 接口例:interface CanFight void fight。;interface CanSwim void swim();interface CanFly void fly();class ActionCharact

24、erpublic void fight() )繼承一個(gè)父類class Hero extends Actioncharacter implementsCanFight,CanSwim, CanFlypublic void swim()public void fly()例:interfaceCanFight void fight。;interface CanSwim void swim();interface CanFly void fly();class ActionCharacterpublic void fight() 繼承一個(gè)父類實(shí)現(xiàn)3個(gè)接口class Hero extends Actio

25、ncharacter implementsCanFight,CanSwim, CanFlypublic void swim()public void fly()Java語(yǔ)言程#設(shè)計(jì)5. 4.5 接口例:interfaceCanFight void fight。;interface CanSwim void swim();interface CanFly void fly();class ActionCharacterpublic void fight() 繼承一個(gè)父類實(shí)現(xiàn)3個(gè)接口class Hero extends Actioncharacter implementsCanFight,CanS

26、wim, CanFlypublic void swim() 繼承了父類中的方法fight(),因此只需 public void fly() 實(shí)現(xiàn)3個(gè)接 口中的2個(gè)方法swim。和fly()public class Adventurepublic static void t(CanFight x)x.fight();public static void u(CanSwim x)x.swim();public static void v(CanFly x)x.fly();public static void w(ActionCharacter x)x.fight();public static v

27、oid main(String args)Hero h = new Hero();t(h); 把 h 視為 CanFight 接口u(h); 把 h 視為 CanSwim 接 口v(h); 把 h 視為 CanFly 接 口w(h); 把h視為ActionCharactor接口 !Java語(yǔ)言程序設(shè)計(jì)5. 4.5 接口public class Adventure 幾個(gè)方法的參數(shù)類型不同public static void t(CanFight x)x.fight();public static void u(CanSwim x)x.swim();public static void v(Can

28、Fly x)x.fly();public static void w(ActionCharacter x)x.fight();public static void main(String args)Hero h = new Hero();t(h); 把 h 視為 CanFight 接口u(h); 把 h 視為 CanSwim 接 口v(h); 把 h 視為 CanFly 接 口w(h); 把h視為ActionCharactor接口 !Java語(yǔ)言程序設(shè)計(jì)public class Adventure /幾個(gè)方法的參數(shù)類型不同 public static void t(CanFight x)x.fight(); public static void u(CanSwim x)x,swim();public static void v(CanFly x)x.fly();public static void w(ActionCharacter x)x.fight(); public static void main(String args)Hero h = new Hero();t(h); 把 h 視為 CanFight 接口u(h); 把 h 視為 CanSwim 接 口v(h); 把 h

溫馨提示

  • 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)論