![Java簡明教程第三四版課件-上課版5_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/bc110a1c-c25d-4aaa-93c3-14d0891b9019/bc110a1c-c25d-4aaa-93c3-14d0891b90191.gif)
![Java簡明教程第三四版課件-上課版5_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/bc110a1c-c25d-4aaa-93c3-14d0891b9019/bc110a1c-c25d-4aaa-93c3-14d0891b90192.gif)
![Java簡明教程第三四版課件-上課版5_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/bc110a1c-c25d-4aaa-93c3-14d0891b9019/bc110a1c-c25d-4aaa-93c3-14d0891b90193.gif)
![Java簡明教程第三四版課件-上課版5_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/bc110a1c-c25d-4aaa-93c3-14d0891b9019/bc110a1c-c25d-4aaa-93c3-14d0891b90194.gif)
![Java簡明教程第三四版課件-上課版5_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/bc110a1c-c25d-4aaa-93c3-14d0891b9019/bc110a1c-c25d-4aaa-93c3-14d0891b90195.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、231第第5章章 接口和包接口和包 本章主要講述如下內(nèi)容本章主要講述如下內(nèi)容 : 接口的定義和使用;接口的定義和使用; 接口與抽象類的異同點(diǎn);接口與抽象類的異同點(diǎn); 包的定義和使用;包的定義和使用; 泛型和應(yīng)用。泛型和應(yīng)用。 2325.1 接口接口 引入接口的原因:引入接口的原因:在程序設(shè)計中經(jīng)常遇到這在程序設(shè)計中經(jīng)常遇到這樣一個問題:有些類互不相關(guān),但卻具有相樣一個問題:有些類互不相關(guān),但卻具有相似的方法。并且這些方法在各個類中的實(shí)現(xiàn)似的方法。并且這些方法在各個類中的實(shí)現(xiàn)互不相同。我們不能為這些類定義一個共同互不相同。我們不能為這些類定義一個共同的父類,但又希望在程序中體現(xiàn)出它們共同的父類,
2、但又希望在程序中體現(xiàn)出它們共同的接口。的接口。 2335.1.1 接口的定義和應(yīng)用接口的定義和應(yīng)用 接口是一系列常量和空方法的集合,它提供接口是一系列常量和空方法的集合,它提供了多個類共同的方法,但不限制每個類如何了多個類共同的方法,但不限制每個類如何實(shí)現(xiàn)這些方法。實(shí)現(xiàn)這些方法。 JavaJava允許一個類同時實(shí)現(xiàn)多個接口,相當(dāng)于允許一個類同時實(shí)現(xiàn)多個接口,相當(dāng)于實(shí)現(xiàn)多繼承的功能。實(shí)現(xiàn)多繼承的功能。 2345.1.1 接口的定義和應(yīng)用(續(xù))接口的定義和應(yīng)用(續(xù)) 聲明一個接口的語法格式:聲明一個接口的語法格式: public interface interfaceName extends su
3、per-interface-Listtype ConstantName=value;type MethodName( Parameter lists); 2355.1.1 接口的定義和應(yīng)用(續(xù))接口的定義和應(yīng)用(續(xù)) 接口中不能聲明任何變量和構(gòu)造函數(shù)。接口中不能聲明任何變量和構(gòu)造函數(shù)。 如果一個類實(shí)現(xiàn)多個接口,應(yīng)該在接口名之間如果一個類實(shí)現(xiàn)多個接口,應(yīng)該在接口名之間用逗號隔開。用逗號隔開。 當(dāng)一個類實(shí)現(xiàn)接口時,必須實(shí)現(xiàn)接口中給出的當(dāng)一個類實(shí)現(xiàn)接口時,必須實(shí)現(xiàn)接口中給出的空方法,若實(shí)現(xiàn)接口的類是一個抽象類,可以空方法,若實(shí)現(xiàn)接口的類是一個抽象類,可以把實(shí)現(xiàn)接口的任務(wù)交給子類去實(shí)現(xiàn)。例如:把實(shí)現(xiàn)接
4、口的任務(wù)交給子類去實(shí)現(xiàn)。例如:/ / 程序程序5-15-1interface Sortable/ 定義一個接口定義一個接口 int Compare(Sortable s); class Sort / 定義一個排序類,僅有一個靜態(tài)的方法定義一個排序類,僅有一個靜態(tài)的方法 public static void SelectSort(Sortable a )int i, j, k;Sortable temp;for(i=0;ia.length-1;i+) / 選擇排序選擇排序 k=i; for(j=i+1;ja.length;j+) if(ak.Compare(aj)0)k=j; temp=ai;
5、ai=ak; ak=temp; class Student implements Sortable / 定義一個學(xué)生類定義一個學(xué)生類private int score;Student(int x)score=x; / 實(shí)現(xiàn)接口實(shí)現(xiàn)接口Sortable中的方法中的方法public int Compare(Sortable s) Student st=(Student)s; / 類型強(qiáng)制轉(zhuǎn)換類型強(qiáng)制轉(zhuǎn)換return score-st.score; public String toString( ) return score=+score; class Rectangle implements So
6、rtable / 矩形類也實(shí)現(xiàn)了接口矩形類也實(shí)現(xiàn)了接口private int length,width; Rectangle(int x,int y) length=x; width=y; int area( )return length*width;public int Compare(Sortable s) / 實(shí)現(xiàn)接口實(shí)現(xiàn)接口Rectangle rec=(Rectangle)s; / 類型強(qiáng)制轉(zhuǎn)換類型強(qiáng)制轉(zhuǎn)換return area( )-rec.area( ); public String toString( ) return area=+area( ); public class in
7、terfaceTest public static void main(String args ) Student stud =new Student20;int i; for( i=0;istud.length;i+) studi=new Student(int)(Math.random( )*100);Sort.SelectSort(stud); / 排序排序for( i=0;istud.length;i+) System.out.println(studi.toString( );Rectangle R =new Rectangle10;for( i=0;iR.length;i+)Ri=
8、new Rectangle( (int)(Math.random( )*10), (int)(Math.random( )*10);Sort.SelectSort( R ); / 排序排序for( i=0;iR.length;i+)System.out.println(Ri.toString( ); 23125.1.1 接口的定義和應(yīng)用(續(xù))接口的定義和應(yīng)用(續(xù)) 接口中定義的變量實(shí)際上是常量,必須給出接口中定義的變量實(shí)際上是常量,必須給出它們的初始值,實(shí)現(xiàn)接口的類可以自由引用它們的初始值,實(shí)現(xiàn)接口的類可以自由引用這些常量。例如:這些常量。例如: / 程序程序5-2的部分的部分interfac
9、e constant int EXCELLENT=5;int GOOD=4;int PASS=3;int FAIL=2; 23135.1.1 接口的定義和應(yīng)用(續(xù))接口的定義和應(yīng)用(續(xù)) 在類中實(shí)現(xiàn)接口中方法時,方法的特征必須在類中實(shí)現(xiàn)接口中方法時,方法的特征必須和接口中聲明的方法特征保持一致;和接口中聲明的方法特征保持一致; 實(shí)現(xiàn)方法時必須在方法前加上實(shí)現(xiàn)方法時必須在方法前加上public; 若一個類沒有對接口中的方法具體實(shí)現(xiàn),那若一個類沒有對接口中的方法具體實(shí)現(xiàn),那么必須將該類聲明為么必須將該類聲明為abstract類。例如:類。例如: interface inter / 接口接口void
10、 methodA( ); abstract class Derived1 implements inter / 此處不需要寫出此處不需要寫出methodA( )的原型的原型 class Derived2 extends Derived1 public void methodA( ) / 實(shí)現(xiàn)方法實(shí)現(xiàn)方法System.out.println(Hi,methodA); 23155.1.2 接口和抽象類的異同點(diǎn)接口和抽象類的異同點(diǎn) 接口和抽象類的相同點(diǎn):接口和抽象類的相同點(diǎn): (1)都有空的方法,都必須在子類中實(shí)現(xiàn)這些方都有空的方法,都必須在子類中實(shí)現(xiàn)這些方法。法。 (2)都不能用都不能用new關(guān)鍵
11、字來創(chuàng)建這兩種類型的對關(guān)鍵字來創(chuàng)建這兩種類型的對象。象。 (3)都可以具有繼承關(guān)系。都可以具有繼承關(guān)系。 (4)接口和類一樣可以具有接口和類一樣可以具有public屬性。屬性。23165.1.2 接口和抽象類的異同點(diǎn)(續(xù))接口和抽象類的異同點(diǎn)(續(xù)) 接口和抽象類的不同點(diǎn):接口和抽象類的不同點(diǎn): (1)在抽象類中,空的方法必須加在抽象類中,空的方法必須加abstract關(guān)鍵字,關(guān)鍵字,而在接口中不需要。而在接口中不需要。 (2)在抽象類中,除空的方法外,可以定義實(shí)例在抽象類中,除空的方法外,可以定義實(shí)例變量和非空的方法,而在接口中,只能定義常量變量和非空的方法,而在接口中,只能定義常量和空的方法
12、。和空的方法。 (3) (3)接口允許多繼承,類僅支持單繼承。接口允許多繼承,類僅支持單繼承。 23175.2 包包 在在Java中可以將自己寫的類,按一定的方法中可以將自己寫的類,按一定的方法歸屬于不同的子目錄中(包)。歸屬于不同的子目錄中(包)。 在缺省情況下,在缺省情況下,Java將所有的類歸屬一個缺將所有的類歸屬一個缺省包中。在不同的包中可以有同名的類存在。省包中。在不同的包中可以有同名的類存在。 Java中的包與中的包與C+中的名字空間相似。中的名字空間相似。 23185.2.1 package語句語句 package語句告訴編譯器當(dāng)前類屬于哪個包。語句告訴編譯器當(dāng)前類屬于哪個包。如
13、果沒有如果沒有package語句,類就存放在無名的語句,類就存放在無名的缺省包中(即當(dāng)前目錄中)。缺省包中(即當(dāng)前目錄中)。 引進(jìn)包的概念主要是為了名字沖突。引進(jìn)包的概念主要是為了名字沖突。 格式格式: package pkglpkg2pkg3;23195.2.2 import語句語句 import語句位于語句位于package語句之后,類的定義語句之后,類的定義之前之前 ; 格式:格式:import package1. .package2. .(class-name | *); 采用采用*號不影響程序的運(yùn)行性能,但會影響編號不影響程序的運(yùn)行性能,但會影響編譯速度。指明具體類比引入整個包更為合
14、理。譯速度。指明具體類比引入整個包更為合理。 23205.2.3 包應(yīng)用舉例包應(yīng)用舉例 package Base; / 將該類存放在將該類存放在d:myjavaBase包中包中 public class Base int friend_data=1;/ 友元成員友元成員public int public_data=2;/ public成員成員private int private_data=3;/ private成員成員protected int protected_data=4; / protected成員成員 package Derived; / 將將Base類存放在類存放在Derived
15、包中包中import Base.*;/ 需要使用需要使用Base包中的類包中的類public class Derived extends Base Base a=new Base( ); public void dataUse( ) /System.out.println(data=+a.friend_data); System.out.println(data_pub=+a.public_data ); /System.out.println(“data_pri=”+a.private_data); /System.out.println(protected_data=+tecte
16、d_data); / testData.java文件的內(nèi)容如下:文件的內(nèi)容如下:import Derived.*; /需要使用需要使用Derived包中的類包中的類 / 該類位于工作目錄,不需要該類位于工作目錄,不需要package語句語句public class testData public static void main(String args ) Derived d=new Derived( );d.dataUse( ); 思考:思考: 在在dataUse( )方法中為什么不能輸出一個保護(hù)成方法中為什么不能輸出一個保護(hù)成員?是否與員?是否與4.16.4節(jié)講述的內(nèi)容相互矛盾?節(jié)講述的內(nèi)
17、容相互矛盾? 將將 System.out.println(protected_data=+tected_data); 修改為:修改為: System.out.println(protected_data=+tected_data); 23245.3 泛型泛型 泛型(泛型(Generics)是)是JDK5.0推出的特性。本推出的特性。本質(zhì)是類型參數(shù)化,可用在類、接口和方法的質(zhì)是類型參數(shù)化,可用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口和泛型創(chuàng)建中,分別稱為泛型類、泛型接口和泛型方法;方法; Java引入泛型的好處引入泛型的好處: 簡單、安全;簡單、安全; 主要目
18、的:建立具有類型安全的集合框架,主要目的:建立具有類型安全的集合框架,如鏈表、散列表等數(shù)據(jù)結(jié)構(gòu)。如鏈表、散列表等數(shù)據(jù)結(jié)構(gòu)。23255.3.1 泛型類的聲明泛型類的聲明 泛型類形式:類名泛型類形式:類名 。例。例5-3。public class over T over; public T getOver() return over; public void setOver(T over) this.over=over; public static void main(String args) / 生成一個生成一個Boolean類型的對象類型的對象 over obj1=new over( ); /
19、 生成一個生成一個Float類型的對象類型的對象 over obj2=new over( ); obj1.setOver(false); obj2.setOver(8.9f); Boolean b=obj1.getOver(); Float f=obj2.getOver(); System.out.println(b); System.out.println(f); 23275.3.2 泛型的一般應(yīng)用泛型的一般應(yīng)用 在定義泛型類時,一般用在定義泛型類時,一般用T來表達(dá)類型名,用來表達(dá)類型名,用E表表達(dá)容器的元素。達(dá)容器的元素。 定義泛型類時聲明多個類型定義泛型類時聲明多個類型 :public
20、class over2 其中其中T1,T2就是類型。應(yīng)用部分舉例:就是類型。應(yīng)用部分舉例:over2 = new over2 (); 定義泛型類時可以聲明數(shù)組。例定義泛型類時可以聲明數(shù)組。例5-4.public class arrayClass T array ; public void setArray(T array ) this.array=array; public T getArray( ) / 返回值是一個泛型類型的數(shù)組返回值是一個泛型類型的數(shù)組 return array; public static void main(String args) arrayClass a = ne
21、w arrayClass ( ); String names = You,Me,Him; a.setArray(names); for(int i=0;ia.getArray( ).length;i+) System.out.printf(%6s,a.getArray( )i); 23295.3.3 鏈表鏈表 java.util包提供的包提供的LinkedList 泛型類,創(chuàng)建泛型類,創(chuàng)建的對象是以鏈表的形式存儲數(shù)據(jù)。使用時必須指的對象是以鏈表的形式存儲數(shù)據(jù)。使用時必須指定定的具體類型。的具體類型。 創(chuàng)建一個元素類型為創(chuàng)建一個元素類型為String類型的空鏈表:類型的空鏈表:LinkedLis
22、t mylist = new LinkedList ( ) ; 例:例:5-5【例例5-5】采用迭代器遍歷鏈表和使用采用迭代器遍歷鏈表和使用List中的中的get方法對比。方法對比。import java.util.*;public class compareTime public static void main( String args) / 采用采用LinkedList泛型類定義一個泛型類定義一個list,節(jié)點(diǎn)為,節(jié)點(diǎn)為Integer類型類型 LinkedList list=new LinkedList( ); for(int i=0;i=50000;i+) / 向鏈表中增加向鏈表中增加
23、50000個數(shù)據(jù)個數(shù)據(jù) list.add(i); Iterator iter=list.iterator(); / 獲得鏈表的迭代器獲得鏈表的迭代器 long startTime=System.currentTimeMillis(); / 獲取遍歷開始時間獲取遍歷開始時間 while(iter.hasNext( ) / 采用迭代器遍歷鏈表采用迭代器遍歷鏈表Integer intNumber=iter.next(); / 獲取鏈表中的數(shù)據(jù)獲取鏈表中的數(shù)據(jù) long endTime = System.currentTimeMillis(); / 獲取遍歷結(jié)束時間獲取遍歷結(jié)束時間 long time
24、Consuming = endTime - startTime; System.out.println(迭代器遍歷鏈表的時間:迭代器遍歷鏈表的時間:+timeConsuming+ ms); startTime=System.currentTimeMillis(); for(int i=0;ilist.size();i+) / 采用采用get( )方法遍歷集合方法遍歷集合Integer intNumber=list.get(i); endTime=System.currentTimeMillis(); timeConsuming=endTime-startTime; System.out.pri
25、ntln(采用采用get方法遍歷鏈表的時間:方法遍歷鏈表的時間:+timeConsuming+ ms); 23325.3.4 棧棧 棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),只能在一端進(jìn)行棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),只能在一端進(jìn)行輸入或輸出。向棧中輸入稱為入棧,從棧中輸出輸入或輸出。向棧中輸入稱為入棧,從棧中輸出稱作出棧。稱作出棧。 可采用可采用java.util包中的包中的stack泛型類創(chuàng)建一個棧泛型類創(chuàng)建一個棧對象。對象。 例:例:5-6【例例5-6】采用棧計算采用棧計算Fibonacci序列的前序列的前5項項 。import java.util.*;public class stackTest pu
26、blic static void main(String args) / 定義一個空的棧對象定義一個空的棧對象s Stack s=new Stack(); s.push(0); / 第第1項是數(shù)據(jù)項是數(shù)據(jù)0,入棧,入棧 s.push(1); / 第第2項是數(shù)據(jù)項是數(shù)據(jù)1,入棧,入棧 for(int k=0; k5; k+) int f2 = s.pop() ; / 棧頂出棧棧頂出棧 int f1 = s.pop() ; / 下下1項出棧項出棧 int temp = f1 + f2; / 根據(jù)前根據(jù)前2項計算后一項項計算后一項 s.push(f1); / 再入棧再入棧 f1 s.push(f2)
27、; / 再入棧再入棧 f2 s.push(temp); / 新值入棧新值入棧 while(!s.empty( ) / 如果棧不為空如果棧不為空 System.out.println(s); / 顯示棧中的數(shù)據(jù)顯示棧中的數(shù)據(jù) s.pop( ); / 將棧頂數(shù)據(jù)出棧將棧頂數(shù)據(jù)出棧 23355.3.5 散列映射散列映射 散列映射散列映射HashMap 泛型類對象采用散列表存儲數(shù)泛型類對象采用散列表存儲數(shù)據(jù)。散列映射存儲據(jù)。散列映射存儲“鍵鍵/值值”對,允許將任意數(shù)量的對,允許將任意數(shù)量的“鍵鍵/值值”對存儲在一起。鍵不能出現(xiàn)沖突,即不能有兩個數(shù)據(jù)項使對存儲在一起。鍵不能出現(xiàn)沖突,即不能有兩個數(shù)據(jù)項使用相同的鍵。如果出現(xiàn)兩個數(shù)據(jù)項使用相同的鍵,那么前用相同的鍵。如果出現(xiàn)兩個數(shù)據(jù)項使用相同的鍵,那么前一個鍵一個鍵/值值”對將被替換。對將被替換。 例:例:5-7 設(shè)計一個英語單詞查詢的簡單程序,用戶輸入英文設(shè)計一個英語單詞查
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度土地開發(fā)權(quán)轉(zhuǎn)讓合同附規(guī)劃設(shè)計及施工許可
- 施工合同簽訂及履行制度
- 教育機(jī)構(gòu)的字體運(yùn)用規(guī)范
- 遠(yuǎn)程教育對學(xué)習(xí)困難學(xué)生的支持研究
- 幼兒園燃?xì)庑孤?yīng)急預(yù)案
- 上海市某物流有限公司勞動合同
- 個人委托代理合同范本示例
- 三孩子離婚贍養(yǎng)費(fèi)合同范本
- 二手物品買賣合同范文
- 個人住房抵押貸款合同范本大全
- 河南2025年河南職業(yè)技術(shù)學(xué)院招聘30人筆試歷年參考題庫附帶答案詳解
- 2025年長沙穗城軌道交通有限公司招聘筆試參考題庫含答案解析
- 2024年湖南有色金屬職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 2025年山東華魯海運(yùn)有限公司招聘筆試參考題庫含答案解析
- 銀川經(jīng)濟(jì)技術(shù)開發(fā)區(qū)2024年綜合考核評價指標(biāo)表及評分細(xì)則
- 品管圈PDCA改善案例-降低住院患者跌倒發(fā)生率
- 讀書分享《給教師的建議》課件
- 《中小學(xué)校園食品安全和膳食經(jīng)費(fèi)管理工作指引》專題講座
- 廣東省茂名市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- 2024統(tǒng)編版新教材道德與法治七年級全冊內(nèi)容解讀課件(深度)
- 成人氧氣吸入療法-中華護(hù)理學(xué)會團(tuán)體標(biāo)準(zhǔn)
評論
0/150
提交評論