




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、抽象類與接口,抽象類,抽象類:用abstract關(guān)鍵字來修飾的類。 聲明為abstract的類不能被實(shí)例化。它只提供了一個(gè)基礎(chǔ),為了實(shí)例化,該類必須作為父類,子類可以通過繼承它,然后添加自己的屬性和方法形成具體的有意義的類。 抽象類必須被繼承。,抽象方法:用abstract來修飾一個(gè)方法時(shí),該方法叫做抽象方法。 抽象方法必須被重寫 抽象方法只有聲明,不能有實(shí)現(xiàn) 定義了抽象方法的類必須是抽象類,【例】抽象類舉例。 abstract class A abstract void callme( ); void metoo( ) System.out.println(Inside As metoo(
2、) method); class B extends A void callme( ) System.out.println(Inside Bs callme( ) method); public class Abstract public static void main( String args ) A c = new B( ); c.callme( ); c.metoo( ); ,接口,接口(interface)就是方法定義和常量值的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實(shí)現(xiàn)。 通過接口可以實(shí)現(xiàn)不相關(guān)類的相同行為,而不需要考慮這些類之間
3、的層次關(guān)系。 通過接口可以指明多個(gè)類需要實(shí)現(xiàn)的方法。 通過接口可以了解對(duì)象的交互界面,而不需了解對(duì)象所對(duì)應(yīng)的類。,接口是用來實(shí)現(xiàn)類間多重繼承功能的結(jié)構(gòu). 在Java中,出于簡(jiǎn)化程序結(jié)構(gòu)的考慮,不支持類間的多重繼承而只支持單重繼承,即一個(gè)類至多只能有一個(gè)直接父類。 接口的實(shí)現(xiàn)功能比多重繼承更強(qiáng) 接口把方法的定義和類的層次區(qū)分開來,通過它可以在運(yùn)行時(shí)動(dòng)態(tài)地定位所調(diào)用的方法; 同時(shí),也可以實(shí)現(xiàn)“多重繼承”,且一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。 正是這些機(jī)制使得接口提供了比多重繼承更簡(jiǎn)單,更靈活,而且更強(qiáng)健的功能。,7,生活中的接口,電腦主板上的PCI插槽的規(guī)范就類似于Java接口,聲卡,顯卡,網(wǎng)卡,每種卡的內(nèi)
4、部結(jié)構(gòu)都不相同,可以把聲卡、網(wǎng)卡、顯卡都插在PCI插槽上,而不用擔(dān)心哪個(gè)插槽是專門插哪個(gè)卡的,主板,8,Java接口,一個(gè)Java接口是一些方法特征的集合,但沒有方法的實(shí)現(xiàn),public interface PCI public void start(); public void stop();,class SoundCard implements PCI public void start() System.out.println(Du du.); public void stop() System.out.println(Sound stop!); ,Java接口中定義的方法在不同的地方被
5、實(shí)現(xiàn),可以具有完全不同的行為,這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范,class NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); ,聲卡、網(wǎng)卡都實(shí)現(xiàn)了PCI插槽的規(guī)范,但行為完全不同,9,Java接口,public class Assembler public static void main(String args) PCI nc = new NetworkCard(); PC
6、I sc = new SoundCard(); nc.start(); sc.start(); ,可以使用Java接口標(biāo)識(shí)類型 運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類型調(diào)用相應(yīng)的方法實(shí)現(xiàn),Du du. Send.,控制臺(tái)輸出,2,1,1. 接口的定義,public interface 接口名extends 接口列表 /常量定義和方法定義 public指明任意類均可以使用這個(gè)接口。在缺省情況下,只有與該接口定義在同一個(gè)包中的類才可以訪問這個(gè)接口。 extends子句與類聲明中的extends子句基本相同,不同的是一個(gè)接口可以有多個(gè)父接口,用逗號(hào)隔開,而一個(gè)類只能有一個(gè)父類。子接口繼承父接口中所有常量和方法
7、。,接口體中包括常量定義和方法定義,其格式如下所示: type constantName = Value; returnType methodName(paramList); 在接口中定義的常量可以被用來實(shí)現(xiàn)該接口的多個(gè)類共享,與C語(yǔ)言中的const定義常量是相似的。 在接口中定義的常量具有public、final、static的屬性。 接口中只進(jìn)行方法的聲明,而不提供方法的實(shí)現(xiàn),所以,方法定義沒有方法體,且用分號(hào)(;)結(jié)尾。在接口中聲明的方法具有public和abstract屬性。 另外,如果在子接口中定義了和父接口同名的常量或相同的方法,則父接口中的常量被隱藏,方法被覆蓋。,例: inte
8、rface Collection int MAX_NUM=100; void add (Object objAdd); void delete (Object objDelet); Object find (Object objFind); int currentCount(); 接口定義中聲明了一個(gè)常量和四個(gè)方法。這個(gè)接口可以由隊(duì)列、堆棧、鏈表等來實(shí)現(xiàn)。,2. 接口的實(shí)現(xiàn),接口的聲明僅僅給出了抽象方法,要具體地實(shí)現(xiàn)接口所規(guī)定的功能,則需某個(gè)類為接口中的抽象方法定義實(shí)在的方法體,這就稱為接口的實(shí)現(xiàn)。 在類的聲明中,用implements句子表示一個(gè)類將要實(shí)現(xiàn)某個(gè)接口,在類體中可以引用接口中定義
9、的常量,而且必須實(shí)現(xiàn)接口中定義的所有方法。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,在implements子句中用逗號(hào)分隔。,【例】接口的實(shí)現(xiàn):在類FIFOQueue中實(shí)現(xiàn)上面所定義的接口collection。 class FIFOQueue implements collection void add (Object obj ) . void delete( Object obj ) . Object find( Object obj ) . int currentCount . ,注意: 在類中實(shí)現(xiàn)接口所定義的方法時(shí),方法的聲明必須與接口中所定義的完全一致。 在類中實(shí)現(xiàn)接口所定義的方法時(shí),必須顯式地使用pu
10、blic修飾符,否則將被系統(tǒng)警告為縮小了接口中定義的方法的訪問控制范圍。 抽象類可以不實(shí)現(xiàn)接口的抽象方法,而非抽象類必須實(shí)現(xiàn)接口中的所有方法。,其他,final關(guān)鍵字,final在類之前 表示該類是最終類,不能再被繼承。 由于安全性的原因或者是面向?qū)ο蟮脑O(shè)計(jì)上的考慮,有時(shí)候希望一些類不能被繼承,例如,Java中的String類,它對(duì)編譯器和解釋器的正常運(yùn)行有很重要的作用,不能輕易改變它,因此把它修飾為final類,使它不能被繼承,這就保證了String類型的唯一性。 final在方法之前 表示該方法是最終方法,用final修飾的方法不能再被子類重寫;該方法不能被任何派生的子類覆蓋。 final
11、在變量之前 表示變量的值在初始化之后就不能再改變;相當(dāng)于定義了一個(gè)常量。,實(shí)例成員和類成員,Java類包括兩種類型的成員:實(shí)例成員和類成員。 除非特別指定,定義在類中的成員一般都是實(shí)例成員。,【例】實(shí)例成員舉例 class AnIntergerNamedX int x; public int x() return x; public void setX(int newX) x=newX; ,聲明了實(shí)例變量之后,當(dāng)每次創(chuàng)建類的一個(gè)新對(duì)象時(shí),系統(tǒng)就會(huì)為該對(duì)象的所有成員創(chuàng)建實(shí)例變量的副本,然后就可以通過對(duì)象訪問這些實(shí)例變量。 實(shí)例方法是對(duì)當(dāng)前對(duì)象實(shí)例變量進(jìn)行操作的,而且可以訪問類變量。,static
12、 在變量或方法之前,表明它們是屬于類的,稱為類方法(靜態(tài)方法)或類變量(靜態(tài)變量)。 類成員用static修飾符聲明,格式如下: static type classVar; static return Type classMethod(paramlist) 分別聲明了類變量和類方法。,類變量,類變量用static修飾符聲明。 系統(tǒng)只為每個(gè)類分配類變量,而不管類創(chuàng)建的對(duì)象有多少。當(dāng)?shù)谝淮握{(diào)用類的時(shí)候,系統(tǒng)為該類變量分配內(nèi)存,所有的對(duì)象共享了該類的類變量。因此,可以通過類本身或者某個(gè)對(duì)象來訪問該類變量。,【例】類變量舉例 class AnIntergerNamedX static int x; p
13、ublic int x() return x; public void setX(int newX) x=newX; ,輸出的兩個(gè)變量結(jié)果相同,這是因?yàn)閤是一個(gè)類變量,因此,就只有該類變量的唯一副本,它被該類的所有對(duì)象所共享,包括myX和anotherX。當(dāng)在任一對(duì)象中調(diào)用setX的時(shí)候,也就改變了該類所有對(duì)象所共享的值。,結(jié)果輸出為: myX.x=2 anotherX.x=2,類方法,為了指定方法為一個(gè)類方法,可以在方法聲明的地方使用static關(guān)鍵字。 類方法只能操作類變量而不能直接訪問在類中定義的實(shí)例變量,除非這些類方法創(chuàng)建了一個(gè)新的對(duì)象,并通過對(duì)象訪問它們。 類方法可以在類中被調(diào)用,不
14、必通過一個(gè)實(shí)例來調(diào)用一個(gè)類方法。 Java程序的入口方法main()就是一個(gè)類方法。,【例】不正確的引用 class AnIntergerNamedX int x; static public int x() return x; static public void setX(int newX) x=newX; ,當(dāng)編譯這個(gè)類時(shí),就會(huì)出錯(cuò)。原因是類方法不能訪問實(shí)例變量。,static,解決方法: 1.將變量變成類變量;,2.創(chuàng)建一個(gè)類的對(duì)象,并且通過該對(duì)象來訪問變量。,同一個(gè)類的實(shí)例方法可以訪問該類的類變量和類方法; 而類方法只能訪問該類的類變量和類方法,不能直接訪問實(shí)例的變量和方法。,內(nèi)嵌類
15、,在一個(gè)類的內(nèi)部聲明的類,稱為內(nèi)嵌類。 內(nèi)嵌類只能在包含它的類中使用,同時(shí)它可以看作是該包含類的一段特殊代碼,可以直接使用該包含類的變量和方法。 內(nèi)嵌類編譯后也會(huì)形成一個(gè)單獨(dú)的class,但它附屬于其包含類。,public class Stack private Vector items; ./code for Stacks methods and constructors not shown. public Enumeration enumerator() return new StackEnum(); class StackEnum implements Enumeration int curr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何健全辦學(xué)管理辦法
- 員額退出機(jī)制管理辦法
- 藥品責(zé)任追究管理辦法
- 拉薩補(bǔ)貼資金管理辦法
- 肯德基安全培訓(xùn)課件
- 倒閘操作培訓(xùn)課件
- 肝膿腫病人護(hù)理課件
- 眾安實(shí)業(yè)培訓(xùn)課件
- 二附中期末數(shù)學(xué)試卷
- kbz饋電開關(guān)培訓(xùn)課件
- 2022年脫硝試題庫(kù)
- DB37∕T 5016-2021 民用建筑外窗工程技術(shù)標(biāo)準(zhǔn)
- 全國(guó)202X年4月自學(xué)考試公文寫作與處理試題和答案解析.doc
- 杜邦安全理念課件
- 《房屋面積測(cè)算技術(shù)規(guī)程》DGJ32TJ131-2011
- 管道無損檢測(cè)施工專項(xiàng)方案
- 先進(jìn)集體申報(bào)表
- 酒店工程部考核表
- 工程塑料 第六章聚甲醛
- 模切設(shè)備日常點(diǎn)檢表
- 10kV配電變壓器缺相運(yùn)行分析
評(píng)論
0/150
提交評(píng)論