使用Java實現物件導向編程——第四章 異常

來源:互聯網
上載者:User

標籤:應用   override   over   必須   src   width   網上   用法   選擇   

1、 介面:介面就是給出一些沒有內容的方法,封裝到一起,到某個類要使用的時候,在根據具體情況把這些方法寫出來。

介面是更加抽象的抽象的類,

抽象類別裡的方法可以有方法體,

介面裡的所有方法都沒有方法體。

介面體現了程式設計的多態和高內聚低偶合的設計思想。

介面是一種規範和標準,他們可以約束類的行為,是一些方法特徵的集合,但是沒有方法的實現。

介面可以看作一種特殊的“抽象類別”,但是採用與抽象類別按群不同的文法來表示;

抽象類別有利於代碼的重用,介面有利於代碼的擴充和維護;

介面的特性:

介面不可以被執行個體化

實作類別必須實現介面的所有方法   // 常作為類型使用

實作類別可以實現多個介面    //Java中的多繼承

介面中的變數都是靜態常量,(屬性都是全域靜態常量,方法都是全域抽象方法)

介面有比抽象類別更好的特性:

1.可以被多繼承

2.設計和實現完全分離

3.更自然的使用多態

4.更容易搭建程式架構

5.更容易更換實現

介面注意事項:

  1、介面不能被執行個體化

  2、介面中所有的方法都不能有主體。錯誤文法例:void aaa(){}←(注意不能有花括弧),介面可以看作更加抽象的抽象類別。

  3、一個類可以實現多個介面,非抽象類別實現介面時必須實現介面中的全部方法,(抽象類別利於代碼複用,介面利於代碼維護)

  4、介面中可以定義常量(int a=1;//加不加static都是靜態,不能用private和protected修飾),不能定義變數

  ★介面中可以有變數[但變數不能用private和protected修飾],介面中的變數,本質上都是static的而且是final類型的,不管你加不加static修飾。

                    訪問形式:介面名.變數名

  ★在java中,把常用的變數,定義在介面中,作為全域變數使用,介面中的屬性都會自動用public static final修飾,即介面中的屬性都是全域靜態變數;

  5、一個介面不能繼承其它的類,但是可以繼承別的介面

  6、介面名命規則與類相同,public在整個項目中可見,如果省略,則只能在當前包中可見;

  7、一個重要的原則:當一個類實現了一個介面,要求該類把這個介面的所有方法全部實現,否則必須定義為抽象類別;

  8、介面中所有方法都是抽象方法,介面中方法都會自動調用public abstract修飾;即介面中只有全域抽象方法;

  9、和抽象類別一樣,介面也不能執行個體化,介面中不能有構造方法;

  10、介面之間可以通過extends實現繼承關係,一個介面可以繼承多個介面,但不能繼承類;

JAVA中介面的定義文法:

修飾符 interface 介面名 extends父介面1,父介面2,……{

//常量定義

//方法定義

}

                               使用介面:eg:usb介面:

                          

類介面的實現文法:

class 類名 extends父類名 implements 介面1,介面2,……{

//類成員

}

 

2、 使用介面:一個類只能有一個直接父類,但可以通過implements實現多個介面,當類在繼承父類的同時又實現了多個介面時,extends關鍵字必須位於implements關鍵字之前;

編碼實現

 

eg:防盜門實現過程:

 

 

介面表示一種能力:體現在介面的方法上

●面向介面編程:

        

介面是一種約定:體現在介面名稱和注釋上;

 ●面向介面編程:程式設計時面向介面的約定而不考慮具體實現;

3、在C#中定義介面文法:

文法:

 

 

實現文法:

 

Eg:定義介面:

 

 

定義實作類別:

 

 

注意事項:

  介面之間可以通過“:”來實現繼承關係,一個介面可以繼承多個介面,但介面不能繼承類;

  類只能繼承一個父類,但可以實現多個介面,使用“:”來繼承類並實現介面;

  介面定義零個或多個成員,成員主要是方法、屬性和索引器。介面中不能包含常量、變數和構造方法,也不能包含任何靜態成員;

  介面中成員存取修飾詞時public,定義介面時顯示指定任意修飾符都是非法的;

  按照慣例,C#中介面以大寫字母“I“開頭;

4、JAVA介面與C#介面對比:

 

JAVA

C#

定義

interface

interface

實現

implements

:

靜態成員

常量

public

可以顯示使用

不能顯示使用

5、抽象類別與介面應用方式:

抽象類別

  不能對欄位抽象(因為欄位只能用等號賦值,沒其他代碼(不同於屬性),沒什麼抽象的意義);

  不能對 private 抽象;

  可以含有非抽象的成員;

  不能執行個體化;

  只能從一個類繼承;

  可以被抽象類別繼承,此時不必實現抽象成員;

  可以被普通類繼承,此時必須實現抽象成員(網上有些說的不必實現,其實那有錯誤,普通類繼承自抽象類別時,必須實現抽象類別的全部抽象成員);

  實現抽象成員時要加 override;

介面:

  不能對欄位介面(因為欄位只能用等號賦值,沒其他代碼(不同於屬性),沒啥介面的意義);

  介面只能是 public 的,且不能使用 public 關鍵字;

  除了介面成員,不能有其他任何實現代碼;

  不能執行個體化;

  可以從多個介面繼承;

  可以被介面繼承;此時不必也無法實現介面成員;

  可以被抽象類別繼承,此時必須實現介面成員;

  可以被普通類繼承,此時必須實現介面成員;

  實現介面不能加 override,必須加 public。

7、附加:

●java的繼承是單繼承,也就是一個類最多隻能有一個父類,這種單繼承的機制可保證類的純潔性,比C++中的多繼承機制簡潔。但是不可否認,對子類功能的擴充有一定影響。所以:

1、 實現介面可以看作是對繼承的一種補充。(繼承是層級式的,不太靈活。修改某個類就會打破繼承的平衡,而介面就沒有這樣的麻煩,因為它只針對實現介面的類才起作用);

2、實現介面可在不打破繼承關係的前提下,對某個類功能擴充,非常靈活。

●介面是一個抽象類別,介面中的方法是一個就有public存取修飾詞的方法,介面中的屬性是一個靜態常量;

介面中的方法預設為public abstract,即使不寫。介面中的方法不能被static修飾。

  • ●class是類的定義,extends是繼承的關鍵字,implements是實現介面的關鍵字,interface是定義介面的關鍵字;

●介面的描述:

 

●介面類型實作類別對象,也是多態的一種表現;

●介面是一個特殊的抽象類別,介面中的所有方法都是抽象方法,所有的屬性都是靜態常量;

介面是Java提供的一個物件導向的機制;

介面可以繼承介面;

使用介面是為了降低模組之間的耦合度;

 

一個類中可以實現多個介面:Java介面是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵,沒有方法的實現,

因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能);

介面中只可以定義常量不可以定義變數是:如果介面可以定義變數,但是介面中的方法又都是抽象的,在介面中無法通過行為來修改屬性;

●一個類實現介面,介面與實作類別之間就是父-子關係 。子類本身執行個體化,子類執行個體化後賦值給父介面都是正常的,這是向上轉型

●介面中定義的都是全域的公用的常量,會預設加上修飾符public、static、final。

●聲明介面:

 

介面裡變數只能是靜態常量,必須賦值;

方法必須抽象方法;

介面只能使用public進行修飾,或者省略;

●eg:

 

 

 

分析:

  介面中定義的屬性都是靜態常量,4個選項中沒有修改該常量,

所以沒有異常,因此選擇c;

●eg:

 

分析:

在java一般的用法中,如果要用普通類來實現介面,則必須實現該介面中的所有方法,這樣就會導致需要實現多餘的方法;

採用抽象類別來實現方法,可以實現該介面中的部分方法,而且當其他類繼承該抽象類別時,只需要實現抽象類別中未實現的方法即可。

例:  抽象類別B只實現了介面A中的方法a、b,

當類C繼承類B時,只需要實現B中未實現的介面c即可。

一般情況下,類C中的方法a、b都是調用父類B的方法a、b

●eg:

 

 

 

 

●eg:

 

 

分析:

調用study()方法時,要站在study()方法所在位置分析,

因為kid對象位於main方法裡,並沒有將age=5以參數形式傳給study()方法中。

因此,study()方法在運行時,預設調用的是類下面的age成員變數。

● 介面不能包含具體方法,所以介面不能繼承類(繼承抽象類別也不行)。

  介面可以繼承多個更小的介面,這也是介面常用設計思路的基礎:

  先細分程式功能,把每個獨立的小功能都定義成微型介面,再以繼承的方式,用小介面拼裝出大型的多功能介面,方便為不同客戶的具體需求實現定製化介面。發布和暴露給使用者使用的是多功能的大介面;單一職能的眾多小介面則保留給自己,因為每個小介面功能獨立且互不依賴,方便調試和維護。

  值得注意的是,抽象類別可以繼承普通類,實現以普通類為基礎,擴充抽象方法。

  C#中,有所謂“擴充方法”的設定,無需繼承也可以擴充一個現有類的方法。

●介面中只能聲明靜態常量,聲明變數時可以不用final static 關鍵字,但必須賦初始值。

  介面中的方法是預設或公開的抽象方法,不能有方法體;可以省略abstract關鍵字。

●public和abstract關鍵字可以修飾類和介面,介面名後無有()

  final可以修飾類但不能修飾介面;

●Java介面與抽象類別的區別,

  介面只能存在public成員,而抽象類別可以存在public,private,protected,default成員;

  介面只能存在抽象方法,抽象類別存在抽象方法和執行個體方法。

  介面只能存在靜態常量,而抽象類別可以存在執行個體成員;

  介面沒有構造方法,而抽象類別存在。

 

 

使用Java實現物件導向編程——第四章 異常

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.