面向?qū)ο蟪绦蛟O(shè)計第13講 包和接口(三)_第1頁
面向?qū)ο蟪绦蛟O(shè)計第13講 包和接口(三)_第2頁
面向?qū)ο蟪绦蛟O(shè)計第13講 包和接口(三)_第3頁
面向?qū)ο蟪绦蛟O(shè)計第13講 包和接口(三)_第4頁
面向?qū)ο蟪绦蛟O(shè)計第13講 包和接口(三)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第13講包和接口(三)/上講回顧接口的定義和實現(xiàn)Collection接口抽象類及其應(yīng)用類File、String、StringBuffer中常用方法掌握System類的常用方法會使用Math類的常用方法會使用Random類的常用方法本講教學(xué)目標(biāo)理解Vector類及其常用方法理解接口5、6、7章習(xí)題Vector類Vector類是Java語言提供的一種高級數(shù)據(jù)結(jié)構(gòu),可用于保存一系列對象。實際上,Java并不支持動態(tài)數(shù)組,Vector類提供了一種與"動態(tài)數(shù)組"相近的功能。如果不能事先確定要保存的對象的數(shù)目,或是需要方便獲得某個對象的存放位置時,可以選擇Vector類。Vector有3個構(gòu)造方法:publicVector();publicVector(int

initialCapacity);publicVector(int

initialCapacity,int

capacityIncrement);

第一個構(gòu)造方法既不指定初始的存儲容量,也不規(guī)定增長的增量,只是創(chuàng)建一個空的向量。第二個構(gòu)造方法創(chuàng)建一個具有initialCapacity個元素空間的向量,但沒有指定增長的增量。第三個構(gòu)造方法在創(chuàng)建Vector對象時指定了初始的存儲容量initialCapacity的向量,并且當(dāng)向量需要增長以向里面追加元素時,一次性增加capacityIncrement個元素。Vector類的構(gòu)造方法publicboolean

add(Object

obj)將對象obj添加到向量的末尾。publicvoidadd(int

index,Object

obj)將對象obj插入到向量的指定位置。publicfinalsynchronizedvoidaddElement(Object

obj)將對象obj插入向量的尾部。對同一個向量對象,可在其中插入不同類的對象。注意插入的應(yīng)是對象而不是數(shù)值,所以插入數(shù)值時要注意將數(shù)值轉(zhuǎn)換成相應(yīng)的對象。setElementAt(Object

obj,intindex)將index處的對象替換成obj,原來的對象將被覆蓋。publicvoidset(int

index,Object

obj)把指定位置處的元素用對象obj替換掉。Vector類的常用方法removeElement(Object

obj)從向量中刪除obj對象。若有存在多個obj對象,則刪除第一個obj對象,同時將后面所有對象前移一位。removeAllElements()刪除向量中所有的對象。publicfinalsynchronizedvoidremoveElementlAt(intindex)刪除index所指的對象,并將后面的所有對象前移一位。publicfinalint

indexOf(Object

obj)從向量頭開始搜索obj,返回所遇到的第一個obj對應(yīng)的下標(biāo),若不存在此obj,返回-1。Vector類的常用方法(續(xù))publicfinalint

indexOf(Object

obj,intindex)

從指定位置查找對象obj在此向量中首次出現(xiàn)的位置。publicfinalint

lastIndexOf(Object

obj)從向量尾部開始逆向搜索obj,返回對象obj最后一次出現(xiàn)的下標(biāo),若不存在此obj,返回-1。publicint

lastIndexOf(Object

obj,intindex)對象obj在位置index之前最后一次出現(xiàn)的位置。publicObjectfirstElement()獲取此向量的第一個元素。Vector類的常用方法(續(xù))publicObjectlastElement()獲取此向量的最后一個元素。publicObjectget(intindex)獲取此向量指定位置處的元素。publicObjectremove(intindex)從此向量中刪除指定位置處的元素,并返回這個元素。publicfinalint

size()獲取向量所含有的元素的個數(shù)。publicint

setSize(intsize)重新設(shè)置向量的大小,若原向量的大小比size大,則放棄后面的元素。publicfinalsynchronizedEnumeration

elements()獲取一個枚舉對象。Vector類的常用方法(續(xù))importjava.util.Vector;importjava.util.Enumeration;publicclassEx7_12{publicstaticvoidmain(String[]args){Vectorvector=newVector();Integerinteger1=newInteger(1);

vector.addElement("one");//加入的為字符串對象

vector.addElement(integer1);vector.addElement(integer1);//加入的為Integer的對象

vector.addElement("two");

vector.addElement(newInteger(2));vector.addElement(integer1);vector.addElement(integer1);

System.out.println("Thefirstvectoris:"+vector);vector.insertElementAt("three",2);

vector.insertElementAt(newFloat(3.14),3);Vector類舉例在指定位置插入新對象,指定位置后的對象依次往后順延

System.out.println("Thesecondvectoris:"+vector);vector.setElementAt("four",2);

System.out.println("Thethirdvectoris:"+vector);vector.removeElement(integer1);

Enumeration

enum=vector.elements(); //枚舉接口

System.out.print("Thefourvectoris:");

while(enum.hasMoreElements())

System.out.print(enum.nextElement()+"");

System.out.println();

System.out.println("Thefirstpositionofobject1:"+vector.indexOf(integer1));

System.out.println("Thelastpositionofobject1:"+vector.lastIndexOf(integer1));vector.setSize(4);

System.out.println("Thenewvectoris:"+vector);}}Vector類舉例(續(xù))實例接口可以象類一樣實現(xiàn)多繼承,請分析下面的程序。publicclassEx7_13{publicstaticvoidt(CanFightx){

x.fight();}publicstaticvoidu(CanSwimx){

x.swim();}publicstaticvoidv(CanFlyx){

x.fly();}publicstaticvoid

w(ActionCharacterx){

x.fight(); }publicstaticvoidmain(String

args[]){Heroh=newHero();

t(h);u(h);

v(h);w(h);}}packageno12.ex7;interfaceCanFight{voidfight();}interfaceCanSwim{voidswim();}interfaceCanFly{voidfly();}classActionCharacter{publicvoidfight(){

System.out.println("canfight!");}}classHeroextendsActionCharacterimplementsCanFight,CanSwim,CanFly{publicvoidswim(){

System.out.println("canswim");}publicvoidfly(){

System.out.println("canfly");}}理解接口 接口的語法規(guī)則很容易記住,但真正理解接口更重要。那為什么要用接口呢?假如轎車、卡車、拖拉機(jī)、摩托車、客車都是機(jī)動車的子類,其中機(jī)動車是一個抽象類。如果機(jī)動車中有一個抽象方法“收取費(fèi)用”,那么所有的子類都要實現(xiàn)這個方法,即給出方法體,產(chǎn)生各自的收費(fèi)行為。這顯然不符合人們的思維方法,因為拖拉機(jī)可能不需要有”收取費(fèi)用”的功能,而其他的一些類,比如飛機(jī)、輪船等可能也需要具體實現(xiàn)”收取費(fèi)用”。理解接口 接口可以增加很多類都需要實現(xiàn)的功能,不同的類可以使用相同的接口,同一個類也可以實現(xiàn)多個接口。接口只關(guān)心功能,并不關(guān)心功能的具體實現(xiàn),比如”客車類”實現(xiàn)一個接口,該接口中有一個”收取費(fèi)用”的方法,那么這個”客車類”必須具體給出怎樣收取費(fèi)用的操作,即給出方法的方法體,不同車類都可以實現(xiàn)”收取費(fèi)用”,但”收取費(fèi)用”的手段可能不相同。接口的思想在于它可以增加很多類都需要實現(xiàn)的功能,使用相同的接口類不一定有繼承關(guān)系,就象各式各樣的商品,它們可能隸屬不同的公司,工商部門要求都必須具有顯示商標(biāo)的功能。實現(xiàn)同一接口,但商標(biāo)的具體制作由各個公司自己去實現(xiàn)。 再比如,你是一個項目主管,你需要管理許多部門,這些部門要開發(fā)一些軟件所需要的類,你可能要求某個類實現(xiàn)一個接口,也就是說你對一些類是否具有這個功能非常關(guān)心,但不關(guān)心功能的具體體現(xiàn),比如這個功能是speakLove

,但你不關(guān)心是用漢語實現(xiàn)功能speakLove

或用英語實現(xiàn)speakLove。在某些時候,你也許打一個電話就可以了,告訴遠(yuǎn)方的一個開發(fā)部門實現(xiàn)你所規(guī)定的接口,并建議他們用漢語來實現(xiàn)speakLove。如果沒有這個接口,你可能要化很多的口舌來讓你的部門找到那個表達(dá)愛的方法,也許他們給表達(dá)愛的那個方法起的名字是完全不同的名字。理解接口接口使用

接口(interface)就是方法定義和常量值的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實現(xiàn)。通過接口可以實現(xiàn)不相關(guān)類的相同行為,而不需要考慮這些類之間的層次關(guān)系。通過接口可以指明多個類需要實現(xiàn)的方法。通過接口可以了解對象的交互界面,而不需了解對象所對應(yīng)的類。接口實例

interface收費(fèi){publicvoid收取費(fèi)用();}class公共汽車implements收費(fèi){publicvoid收取費(fèi)用(){

System.out.println("公共汽車:一元/張,不計算公里數(shù)");}}class出租車implements收費(fèi){publicvoid收取費(fèi)用(){

System.out.println("出租車:1.60元/公里,起價3公里");}}class電影院implements收費(fèi){publicvoid收取費(fèi)用(){

System.out.println("電影院:門票,十元/張");}}classExample4{publicstaticvoidmain(String

args[]){

公共汽車七路=new公共汽車();

出租車天宇=new出租車();

電影院紅星=new電影院();

七路.收取費(fèi)用();天宇.收取費(fèi)用();

紅星.收取費(fèi)用();}}注:接口聲明時,如果關(guān)鍵字interface前面加上public關(guān)鍵字,就稱這樣的接口是一個public接口,public接口可以被任何一個類使用。如果一個接口不加public修飾,就稱做友好接口類,友好接口可以被同一包中的類使用。接口回調(diào)是指可以把實現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中。那么該接口變量就可以調(diào)用被類實現(xiàn)的接口中的方法。實際上,當(dāng)接口變量調(diào)用被類實現(xiàn)的接口中的方法時,就是通知相應(yīng)的對象調(diào)用接口的方法。接口回調(diào)接口回調(diào)示例

interfaceShowMessage{void顯示商標(biāo)(Strings);}classTVimplementsShowMessage{publicvoid顯示商標(biāo)(Strings){

System.out.println(s);}}classPCimplementsShowMessage{publicvoid顯示商標(biāo)(Strings){

System.out.println(s);}}接口回調(diào)示例publicclassExample5{publicstaticvoidmain(String

args[]){

ShowMessage

sm;

sm=newTV();sm.顯示商標(biāo)("長城牌電視機(jī)");

sm=newPC();sm.顯示商標(biāo)("聯(lián)想奔月5008PC機(jī)");}}第7章小結(jié)包是類和接口的集合,包可以嵌套。類用一個package語句定義所屬的包。Import語句使包中定義的類和接口可以直接按名引用。包又分為用戶自定義包和系統(tǒng)包。用戶自定義包是由用戶自己定義的,相當(dāng)于文件系統(tǒng)中的文件夾,用來存放用戶定義的類。接口是常量和抽象方法的集合。接口是Java對多重繼承的解決方法。類實現(xiàn)接口的方法是把該接口加入implements語句,并且實現(xiàn)接口及其父接口中的所有抽象方法。Java系統(tǒng)包中大量的類,如:File類、System類、以及Math類和Vector類。第5章復(fù)習(xí)以下程序的功能是,統(tǒng)計數(shù)組{56,90,89,23,45,61,60,59}中元素值小于60的個數(shù),并輸出。請將程序補(bǔ)充完整。注意:請勿改動程序已有內(nèi)容,僅在?處填入適當(dāng)?shù)恼Z句。publicclassJava1{ publicstaticvoidmain(String[]args){

intscore[]={56,90,89,23,45,61,60,59};

intnum=0;

int

len=score.?;

inti=0;

while(i<?){

if(?<60)

num++;

?;

System.out.println("<60:"+num); }}第6章復(fù)習(xí)仔細(xì)閱讀程序,完成類Java1的定義,并將程序補(bǔ)充完整。注意:請勿改動程序已有內(nèi)容,僅在?處填入適當(dāng)?shù)恼Z句。publicclassJava1{

intnum1; doublenum2;

publicJava1(?)

{ num1=a; num2=b;

} publicstaticvoidmain(String[]args){

inta=23; doubleb=4.5;

溫馨提示

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

評論

0/150

提交評論