Java的繼承、多態(tài)、高級類特性和數(shù)組_第1頁
Java的繼承、多態(tài)、高級類特性和數(shù)組_第2頁
Java的繼承、多態(tài)、高級類特性和數(shù)組_第3頁
Java的繼承、多態(tài)、高級類特性和數(shù)組_第4頁
Java的繼承、多態(tài)、高級類特性和數(shù)組_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、?”.length。;Java語言程用設(shè)計5. 1. 3 String類2)用String類表示字符串可利用String類的構(gòu)造方法生成空串例:String e = new String();可通過字符數(shù)組或字節(jié)數(shù)組生成字符串對象 (以后討論)5. 1. 3 String類3.字符串的修改、連接和替換1)字符串連接String strl = abc” ;String str2 = strl.concat( cde);/str2= abccde”相當于 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” ;注意:字符串的字符順序號是從0開始的,對于例子 中的str2,第0個字符是a,第5個字符是%,; substring。1,山)是從指定字符串的第n個字符開 始截取子串到第山個,其中不包括第m個Java語言程中設(shè)計5. 1. 3 String類4.字符串

5、比較s- equals (t);比較字符串S與t的內(nèi)容是否相同。不能以S=t比較!如果某個子基盤靠瀛類中的某個方 法有相同的名稱、返回類型和參數(shù),但功能不同(方法的具體實現(xiàn)不同),則稱這個方法覆蓋了它的父類方法。方法覆蓋條件:成員名稱相同;參數(shù)個數(shù)、類型、順序相同;返回值類型相同;靜態(tài)方法只能覆蓋為靜態(tài)方法;訪問屬性的要求:覆蓋的方法必須提供與被覆蓋方法一樣的訪問 權(quá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使用子類的父類中的訪問屬性子類中的覆蓋方法訪問屬性publicpublicprotectedpubli c 或 p rotected默認不能是privateJava語言程序設(shè)計例一個簡單的方法覆蓋的例子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語言程嚀設(shè)計方法的重載翻妻嘉麟個名稱相同、但 參數(shù)不同的方法。Java虛擬機能根據(jù)傳遞給方法的參數(shù),自動選擇合適的重載方法。重載的簡單例子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 ; 兩個同名的方法,但是參數(shù)個數(shù)不同ostatic int max (int a , int b, int c ) int

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

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

10、增量“static 方法public static void writeCount()System.out.println(,fNumber of lights:0 + counter);/ System.outprintln(uNumber of lights: counter);此行編譯錯誤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)建一個對象System.o

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

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

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

14、為抽象方法。抽象方法只 需聲明,無需實現(xiàn);抽象類不能被實例化,抽象類不一定要 包含抽象方法。若類中包含了抽象方法,則該類必須被定義 為抽象類。Java語言程序設(shè)計5. 4. 4抽象類例 5. 10 AbstractClassTest. java abstract class Person /抽象類的聲明,不能實例化 public Person(String n) name = n;public abstract String getDescriptionO;沒有方法體的抽象方法,即只說明了這個方法的存在,由子類來實現(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 /實現(xiàn)父類聲明過的抽象方法 return String format (公司雇員,年薪是%. 2f” , salary);)Java語言程序設(shè)計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 /實現(xiàn)父類聲明過的抽象方法 return String “大學生,專業(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對豪,賦值給people0,為什么

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

19、父類3)接口可以了解對象的交互界面(方法),無 需了解對象所對應(yīng)的類。5. 4.5 接口什么東西會飛?父類:動物父類:交通工具接口:會飛翔子類:小鳥 子類:飛機Java語言程序設(shè)計5. 4.5 接口1聲明接口接口修飾符interface接口名extends父類名 方法原型聲明或常量。常量定義格式為:type NAME=value;該常量被實現(xiàn)該接口的多個類共享;具有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語言程存設(shè)計5. 4.5 接口2實現(xiàn)接口接口只有抽象方法,不能實例化,要使用接口,必須定義類。語法:public class類名 implements接口名數(shù)據(jù)接口方法)股票接口實現(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) .) 具體實現(xiàn)3接口作為類型的使用public class StockMonitorpublic void watchSt

22、ock(StockWatcherwatcher5String tickerSymbol,double delta)Java語言程存設(shè)計5. 4.5 接口3接口作為類型的使用public class StockMonitorpublic void watchStock(StockWatcherwatcher,StringtickerSymbol,double delta). 接口名作名參數(shù)的類型 意味著:我們不關(guān)心對象所對應(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語菖程中設(shè)計5. 4.5 接口例:interface CanFight void fight。;interface CanSwim void swim();interface CanFly void fly();class ActionCharact

24、erpublic void fight() )繼承一個父類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() 繼承一個父類實現(xiàn)3個接口class Hero extends Actio

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

26、wim, CanFlypublic void swim() 繼承了父類中的方法fight(),因此只需 public void fly() 實現(xiàn)3個接 口中的2個方法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語言程序設(shè)計5. 4.5 接口public class Adventure 幾個方法的參數(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語言程序設(shè)計public class Adventure /幾個方法的參數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論