1. 程式人生 > >介面和抽象類的理解 和因該在什麼時候用到!

介面和抽象類的理解 和因該在什麼時候用到!

1.首先說一下他們的理論區別

a:abstract是”is a”的關係(’是什麼‘的意思,例:樹是植物 單繼承關係),interface是”like a”的關係(“像什麼”的意思,例:我跟我爸爸長的很像,我兄弟跟我爸爸長的也很像  多繼承關係);

b、抽象類被子類繼承,介面被類實現.

c、抽象類中可以做方法申明,也可以做方法實現(裡面寫實現可以用private,但是用抽象類修飾的方法不能用private修飾),介面只能做方法申明;

d、抽象類中可以有成員變數,介面中不能有成員變數;

e、抽象類裡的方法可以被protected修飾和public 如果不加修飾符這是預設的default不能用private修飾沒有意義,介面只能被public修飾。

2. 這麼多區別對於我們設計程式碼的時候,我就會想什麼時候用介面什麼時候用 抽象類呢?

    下面是自己的理解加上網路中各種大神理解的總結 。

a、通過上面分析我們不難發現定義了abstract的類只能被別的類繼承而且被繼承的類只能繼承一個抽象類,

     但是介面就不一樣我們可以給一個類定義多個介面,這是我感覺這2個java中定義抽象類的最大區別。

     所有在做專案的時候不難發現最上層為介面,中間層次為抽象類(因為抽象類可以實現也可以方法宣告),往下就是我們的實現類。(求大神看看自己理解不知道對不對)

     在現在的專案中全是對於資料庫的增刪改查,所以我們把增刪改查方法申明寫成一個介面,然後在經過呼叫來實現方法的複用從而可以減少程式碼,提高複用。

      從複用性的角度因該還看出來了java中重要的一個原則“開閉原則”。

(1)開閉原則的2個特點

     對修改關閉,

 在運用的介面或者抽象java類的時候 ,我們的抽象層因該預見所有可能的擴充套件。因此在寫完抽象層後任何情況下不會改變。
這樣就滿足了開閉原則的對修改關閉這一條。

     對擴充套件開放。

在實現抽象類和介面的新的具體類可以改變系統的行為,所以系統的設計對擴充套件是開放的滿足對擴充套件開放。

b、介面的理解

      介面因為只有方法宣告沒有定義的, 因此可以理解成介面是子類實現其方法宣告而不是繼承其方法。但是一般類的方法可以有方法體,那麼叫繼承比較合理。因為介面就是個規範,是個沒方法體的方法宣告集合。

      我來舉個例子吧:介面可以比作協議,比如我說 一個協議是“殺人”那麼這個介面你可以用砍刀去實現,至於怎麼殺砍刀可以去實現,當然你也可以用搶來實現殺人介面,但是你不能用殺人介面去殺人,因為殺人介面只不過是個功能說明,是個協議,具體怎麼幹,還要看他的實現類。那麼一個包裡面如果有介面,你可以不實現。這個不影響你使用其他類。


相關推薦

C#的繼承、介面抽象理解

OOP三特性:繼承、封裝、多型繼承:C#屬於單繼承,即派生類最多隻能有一個直接基類,但可以傳遞繼承,即A類派生B類,B類派生C類,派生類會保留所有基類以及傳遞基類的欄位、屬性、方法等所有內容。如果要在派生類中隱藏基類內容,可以通過new關鍵字實現,或是通過base來呼叫基類的

介面抽象理解 在什麼時候

1.首先說一下他們的理論區別 a:abstract是”is a”的關係(’是什麼‘的意思,例:樹是植物 單繼承關係),interface是”like a”的關係(“像什麼”的意思,例:我跟我爸爸長的

Java介面抽象的深入理解

  對於面向物件程式設計來說,抽象是它的一大特徵之一。在Java中,可以通過兩種形式來體現OOP的抽象:介面和抽象類。這兩者有太多相似的地方,又有太多不同的地方。很多人在初學的時候會以為它們可以隨意互換使用,但是實際則不然。今天我們就一起來學習一下Java中的介面和抽象類。下面是本文的目錄

深入理解java的介面抽象

深入理解Java的介面和抽象類(原文轉自:http://www.cnblogs.com/dolphin0520/p/3811437.html)   對於面向物件程式設計來說,抽象是它的一大特徵之一。在Java中,可以通過兩種形式來體現OOP的抽象:介面和抽象類。這兩者有太多

理解介面抽象

1. 介面 1.1 介面的概述  介面是功能的集合,介面只描述所應該具備的方法,並沒有具體的實現,具體的實現由介面的實現類來完成。 1.2 介面定義的格式     Public interface 介面名{       屬性(常量,值固定不變,不能修改)      

java介面抽象的區別,什麼時候介面什麼時候抽象

相信大家在面試過程中都會被問到這個問題,語法上的區別大家都知道,但是如果面試時你只說語法上的區別估計面試官會在心裡扣你兩分。 下面說說我在使用過程中關於這兩者在設計方面的區別的一些理解: 介面大家比較熟悉一點,因為現在的MVC架構業務層規範就是先寫介面再寫實現類,介面設計的目

Java基礎:深入理解Java的介面抽象

     對於面向物件程式設計來說,抽象是它的一大特徵之一。在Java中,可以通過兩種形式來體現OOP的抽象:介面和抽象類。這兩者有太多相似的地方,又有太多不同的地方。很多人在初學的時候會以為它們可以隨意互換使用,但是實際則不然。今天我們就一起來學習一下Java中的介面和

[轉]深入理解Java的介面抽象

深入理解Java的介面和抽象類   對於面向物件程式設計來說,抽象是它的一大特徵之一。在Java中,可以通過兩種形式來體現OOP的抽象:介面和抽象類。這兩者有太多相似的地方,又有太多不同的地方。很多人在初學的時候會以為它們可以隨意互換使用,但是實際則不然。

PHP介面抽象、繼承的理解應…

幾個問題全是關於介面,介面有什麼用?為什麼要用介面?什麼時候該使用介面?很慶幸他們不是問我Java如何連線SQL Server,或者是如何開發J2EE,這類問題有殺傷力,避之則吉。今年計算機學院本科有個畢業設計課題是做J2ME,選這個題目的學生在5月末都還在苦著臉研究java.util.*這個包,這個這個唉

(轉載)深入理解java的接口抽象

final類 轉載 如何實現 靜態 參考 種類型 tar 發現 是否 本文轉自地址:http://www.cnblogs.com/dolphin0520/p/3811437.html 作者:海子 出處:http://www.cnblogs.com/dolphin0520/

深入理解Java的接口抽象

blog 編譯 但是 單獨 設計者 錯誤 了解 strac 函數 轉載請標明原文鏈接: http://www.cnblogs.com/dolphin0520/p/3811437.html 對於面向對象編程來說,抽象是它的一大特征之一。在Java中,可以通過兩種形式來體

深入理解接口抽象的區別以及使用

靜態方法 因此 解決辦法 stat 繼承 功能 fun 抽象方法 調用 感覺這篇文章對於接口和抽象類的理解非常有幫助!故抄襲下來,留存。 對於面向對象編程來說,抽象是它的一大特征之一。在Java中,可以通過兩種形式來體現OOP的抽象:接口和抽象類。這兩者有太多相似的地方,又

深入理解Java的接口抽象(轉)

protected 創建對象 使用 很多 抽象方法 wid 類的抽象 con 模板 深入理解Java的接口和抽象類   對於面向對象編程來說,抽象是它的一大特征之一。在Java中,可以通過兩種形式來體現OOP的抽象:接口和抽象類。這兩者有太多相似的地方,又有太多不同的地方。

java自動拆裝箱,介面抽象

1.Java支援的資料型別有哪些?什麼是自動拆裝箱? Java語言支援的8中基本資料型別是: byte short int long float double boolean char 自動裝箱是Java編譯器在基本資料型別和對應的物件包裝型別之間做的一個轉化。比如:把int轉化成Integ

python學習筆記(31) 介面抽象

from abc import abstractmethod.ABCmeta class Payment(mataclass = ABCmeta):  #元類 預設的元類 type   @abstractmethod   def pay(self,money):pass 介面類或者抽象類都是為了規範子

介面抽象的繼承實現關係

參考:https://blog.csdn.net/hudfang/article/details/50556277 //c++多繼承與多層繼承 參考:https://blog.csdn.net/Lingfeng928/article/details/51917955  

JAVA:介面抽象的區別

1.從設計層面來說,抽象是對類的抽象,是一種模板設計 ,介面是行為的抽象,是一種行為的規範 介面 interface 抽象類 介面中所有方法都是抽象的 抽象類中可以有抽象方法和普通方法 一

介面抽象得區別

首先是基本定義 介面: 使用介面(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。 介面是通過 interface 關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。 介面中定義的所有方法都必須是公有,這

Java特性-介面抽象區別

抽象類是自底向上抽象出來的,介面則是自頂向下設計出來的。 抽象類是對事物本身的抽象,比如貓類,狗類就可以抽象為動物類。 介面是對行為的抽象,比如男人要吃飯,女人也要吃飯,吃飯就可以抽象為介面。 抽象類表示的是這個物件是什麼,介面表示的是這個物件能幹什麼。 所以

java介面抽象的區別

全域性變數的區別 介面中所有的全域性變數預設為 public static final,處於方法區的常量池中,且是靜態域中的成員 抽象類的全域性變數無硬性約束 方法的區別 介面 介面