第5講-面向對象程序設計(3).ppt_第1頁
第5講-面向對象程序設計(3).ppt_第2頁
第5講-面向對象程序設計(3).ppt_第3頁
第5講-面向對象程序設計(3).ppt_第4頁
第5講-面向對象程序設計(3).ppt_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、抽象類與接口,抽象類,抽象類:用abstract關鍵字來修飾的類。 聲明為abstract的類不能被實例化。它只提供了一個基礎,為了實例化,該類必須作為父類,子類可以通過繼承它,然后添加自己的屬性和方法形成具體的有意義的類。 抽象類必須被繼承。,抽象方法:用abstract來修飾一個方法時,該方法叫做抽象方法。 抽象方法必須被重寫 抽象方法只有聲明,不能有實現(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)就是方法定義和常量值的集合。從本質上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實現(xiàn)。 通過接口可以實現(xiàn)不相關類的相同行為,而不需要考慮這些類之間

3、的層次關系。 通過接口可以指明多個類需要實現(xiàn)的方法。 通過接口可以了解對象的交互界面,而不需了解對象所對應的類。,接口是用來實現(xiàn)類間多重繼承功能的結構. 在Java中,出于簡化程序結構的考慮,不支持類間的多重繼承而只支持單重繼承,即一個類至多只能有一個直接父類。 接口的實現(xiàn)功能比多重繼承更強 接口把方法的定義和類的層次區(qū)分開來,通過它可以在運行時動態(tài)地定位所調用的方法; 同時,也可以實現(xiàn)“多重繼承”,且一個類可以實現(xiàn)多個接口。 正是這些機制使得接口提供了比多重繼承更簡單,更靈活,而且更強健的功能。,7,生活中的接口,電腦主板上的PCI插槽的規(guī)范就類似于Java接口,聲卡,顯卡,網(wǎng)卡,每種卡的內

4、部結構都不相同,可以把聲卡、網(wǎng)卡、顯卡都插在PCI插槽上,而不用擔心哪個插槽是專門插哪個卡的,主板,8,Java接口,一個Java接口是一些方法特征的集合,但沒有方法的實現(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、實現(xiàn),可以具有完全不同的行為,這是Java接口,相當于主板上的PCI插槽的規(guī)范,class NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); ,聲卡、網(wǎng)卡都實現(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接口標識類型 運行時,根據(jù)實際創(chuàng)建的對象類型調用相應的方法實現(xiàn),Du du. Send.,控制臺輸出,2,1,1. 接口的定義,public interface 接口名extends 接口列表 /常量定義和方法定義 public指明任意類均可以使用這個接口。在缺省情況下,只有與該接口定義在同一個包中的類才可以訪問這個接口。 extends子句與類聲明中的extends子句基本相同,不同的是一個接口可以有多個父接口,用逗號隔開,而一個類只能有一個父類。子接口繼承父接口中所有常量和方法

7、。,接口體中包括常量定義和方法定義,其格式如下所示: type constantName = Value; returnType methodName(paramList); 在接口中定義的常量可以被用來實現(xiàn)該接口的多個類共享,與C語言中的const定義常量是相似的。 在接口中定義的常量具有public、final、static的屬性。 接口中只進行方法的聲明,而不提供方法的實現(xiàn),所以,方法定義沒有方法體,且用分號(;)結尾。在接口中聲明的方法具有public和abstract屬性。 另外,如果在子接口中定義了和父接口同名的常量或相同的方法,則父接口中的常量被隱藏,方法被覆蓋。,例: inte

8、rface Collection int MAX_NUM=100; void add (Object objAdd); void delete (Object objDelet); Object find (Object objFind); int currentCount(); 接口定義中聲明了一個常量和四個方法。這個接口可以由隊列、堆棧、鏈表等來實現(xiàn)。,2. 接口的實現(xiàn),接口的聲明僅僅給出了抽象方法,要具體地實現(xiàn)接口所規(guī)定的功能,則需某個類為接口中的抽象方法定義實在的方法體,這就稱為接口的實現(xiàn)。 在類的聲明中,用implements句子表示一個類將要實現(xiàn)某個接口,在類體中可以引用接口中定義

9、的常量,而且必須實現(xiàn)接口中定義的所有方法。一個類可以實現(xiàn)多個接口,在implements子句中用逗號分隔。,【例】接口的實現(xiàn):在類FIFOQueue中實現(xiàn)上面所定義的接口collection。 class FIFOQueue implements collection void add (Object obj ) . void delete( Object obj ) . Object find( Object obj ) . int currentCount . ,注意: 在類中實現(xiàn)接口所定義的方法時,方法的聲明必須與接口中所定義的完全一致。 在類中實現(xiàn)接口所定義的方法時,必須顯式地使用pu

10、blic修飾符,否則將被系統(tǒng)警告為縮小了接口中定義的方法的訪問控制范圍。 抽象類可以不實現(xiàn)接口的抽象方法,而非抽象類必須實現(xiàn)接口中的所有方法。,其他,final關鍵字,final在類之前 表示該類是最終類,不能再被繼承。 由于安全性的原因或者是面向對象的設計上的考慮,有時候希望一些類不能被繼承,例如,Java中的String類,它對編譯器和解釋器的正常運行有很重要的作用,不能輕易改變它,因此把它修飾為final類,使它不能被繼承,這就保證了String類型的唯一性。 final在方法之前 表示該方法是最終方法,用final修飾的方法不能再被子類重寫;該方法不能被任何派生的子類覆蓋。 final

11、在變量之前 表示變量的值在初始化之后就不能再改變;相當于定義了一個常量。,實例成員和類成員,Java類包括兩種類型的成員:實例成員和類成員。 除非特別指定,定義在類中的成員一般都是實例成員。,【例】實例成員舉例 class AnIntergerNamedX int x; public int x() return x; public void setX(int newX) x=newX; ,聲明了實例變量之后,當每次創(chuàng)建類的一個新對象時,系統(tǒng)就會為該對象的所有成員創(chuàng)建實例變量的副本,然后就可以通過對象訪問這些實例變量。 實例方法是對當前對象實例變量進行操作的,而且可以訪問類變量。,static

12、 在變量或方法之前,表明它們是屬于類的,稱為類方法(靜態(tài)方法)或類變量(靜態(tài)變量)。 類成員用static修飾符聲明,格式如下: static type classVar; static return Type classMethod(paramlist) 分別聲明了類變量和類方法。,類變量,類變量用static修飾符聲明。 系統(tǒng)只為每個類分配類變量,而不管類創(chuàng)建的對象有多少。當?shù)谝淮握{用類的時候,系統(tǒng)為該類變量分配內存,所有的對象共享了該類的類變量。因此,可以通過類本身或者某個對象來訪問該類變量。,【例】類變量舉例 class AnIntergerNamedX static int x; p

13、ublic int x() return x; public void setX(int newX) x=newX; ,輸出的兩個變量結果相同,這是因為x是一個類變量,因此,就只有該類變量的唯一副本,它被該類的所有對象所共享,包括myX和anotherX。當在任一對象中調用setX的時候,也就改變了該類所有對象所共享的值。,結果輸出為: myX.x=2 anotherX.x=2,類方法,為了指定方法為一個類方法,可以在方法聲明的地方使用static關鍵字。 類方法只能操作類變量而不能直接訪問在類中定義的實例變量,除非這些類方法創(chuàng)建了一個新的對象,并通過對象訪問它們。 類方法可以在類中被調用,不

14、必通過一個實例來調用一個類方法。 Java程序的入口方法main()就是一個類方法。,【例】不正確的引用 class AnIntergerNamedX int x; static public int x() return x; static public void setX(int newX) x=newX; ,當編譯這個類時,就會出錯。原因是類方法不能訪問實例變量。,static,解決方法: 1.將變量變成類變量;,2.創(chuàng)建一個類的對象,并且通過該對象來訪問變量。,同一個類的實例方法可以訪問該類的類變量和類方法; 而類方法只能訪問該類的類變量和類方法,不能直接訪問實例的變量和方法。,內嵌類

15、,在一個類的內部聲明的類,稱為內嵌類。 內嵌類只能在包含它的類中使用,同時它可以看作是該包含類的一段特殊代碼,可以直接使用該包含類的變量和方法。 內嵌類編譯后也會形成一個單獨的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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論