1. 程式人生 > >java抽象類與接口的比較

java抽象類與接口的比較

能力 大神 所有 bst style 行為 屬性 獨立 修改

l 語法:

  抽象類:

    1.如果一個類中有個方法時被聲明為抽象方法,那麽本類需要用abstract關鍵字聲明;

    2.抽象類的成員屬性跟普通類沒什麽區別;

    3.抽象類不能被直接實例化;

    4.抽象類中的抽象方法可以用public product修飾 不能用static final private修飾;

    5.還是跟普通類一樣只支持單繼承

  接口:

    1.接口中的方法全部為 抽象方法 都是被public abstract修飾的

    2.接口中的變量全部為public static final修飾的常量

    3.接口可以多繼承 是對java中單繼承的一種折中解決辦法;

l 設計理念:

    1.抽象類跟接口以及多態概念以及設計理念完全是為了描述現實世界的而提出來的:

    2.抽象類是對一類事物的抽象描述,而接口是對行為的抽象;抽象類主要描述的是類整體的一種描述,包括屬性、行為、而接口是對類中行為的一種抽像描述;

  接口:面對的整個世界的行為(不區分類屬體系);

  抽象類:對現實世界一類事物的向上抽取——面對一個(類屬)體系

  語義體現:Extends/ implements == 是不是(類屬)/有沒有(能力)

l 設計層面上不同:

  1.抽象類作為很多子類的父類,體現的是一種“模板設計”的模式

    好處:繼承—java中帶來的好處避免數據的冗余,);

    例如: 根據PPT模板A 的基礎上設計類PPTB、PPTC 那麽A就可以看作模板 如果需要公共部分的改動,只需要修改A就行了

  2.接口:是對行為的抽取,體現的是輻射式的設計模式;如果接口進行類變更,實現類都需要該寫

    好處:程序(行為)模塊耦合度低設計靈活(例如:獨立的薩德反導系統(定義成接口),這樣路基實現該組接口,就可以路基發射;潛艇實現了該組接口,就可以海基發射;..等等,)

  總結12:抽象類可以看作是對整個世界縱向抽取; 接口是橫向抽取所有類的行為的抽取;

l 面向接口編程(是一種軟件的設計架構):

在系統分析和架構中,分清層次和依賴關系,每個層次不是直接向其上層提供服務(即不是直接實例化在上層中),而是通過定義(該層的)一組接口,僅向上層暴露其接口功能,上層對於下層僅僅是接口依賴,而不依賴具體類。對系統的靈活性大有好處;

例如:javaEE項目設計架構時:

web層,service層,dao層

我們習慣在dao層中暴漏:(註冊相關一組接口)、(登錄相關的一組接口)、(商品類查詢的一組接口)...等等其他功能的接口組。這樣整個項目的主支桿都好了,(架構清晰明朗)無論從維護,還是復用性,代碼工程性來說,都大大地提高了!

      呵呵呵!希望大神們前來指正!!!。。

java抽象類與接口的比較