抽象類與接口

抽象類能夠繼承Object和其餘實例類、抽象類java

接口只能繼承接口算法

 

1. 抽象類:分離方法的設計和實現spa

1.1 目的:設計

      爲一類對象創建抽象的模型,在同類對象所對應的類體系中,抽象類每每在頂層。這一方面使類的設計變得清晰,另外一方面抽象類也爲類的體系提供通用的接口。這些通用的接口反映了一類對象的共同特徵。定義了這樣的抽象類後,就能夠利用Java的多態機制,經過抽象類中的通用接口處理類體系中的全部類。3d

      實際上,即便不包括任何抽象方法,也能夠將一個類聲明爲抽象類。這樣的類每每是沒有必要定義任何抽象方法,而設計者又想禁止建立該類的實例變量,此時只須要在類的聲明中加上abstract關鍵字。對象

1.2 注意:blog

① 定義抽象類和抽象方法能夠向用戶和編譯器明確代表該類的做用和用法,使類體系設計更加清晰,並可以支持多態,所以是Java的一種頗有用的面向對象機制。繼承

② 通常將抽象類構造方法的訪問權限聲明爲protected而不是public,從而保證構造方法可以由子類調用而不被其餘無關的類調用。接口

③ 抽象類裏的構造器並非用於建立對象,而是讓其子類調用這些構造器來完成屬於抽象類的初始化操做。編譯器

1.3 抽象方法:

  • 抽象方法不能是靜態static方法;
  • abstract不能和final一塊兒出現:

               abstract修飾的類須要被子類繼承,abstract修飾的方法須要子類重寫,可是final修飾的類不能被繼承,final修飾的方法也不能被子類重寫。

  • private不能和abstract同時出現
  • abstract不能用於修飾屬性,也不能用於修飾構造器,沒有抽象構造器(由於子類也無法重寫父類的構造器),抽象類裏定義的構造器只能是普通構造器。

1.4 爲何須要抽象類?如何定義抽象類?

  • 是一種模板模式。抽象類爲全部子類提供了一個通用模板,子類能夠在這個模板基礎上進行擴展。
  • 經過抽象類,能夠避免子類設計的隨意性。經過抽象類,咱們就能夠作到嚴格限制子類的設計,使子類之間更加通用。

1.5 要點:

  • 有抽象方法的類只能定義抽象類;
  • 抽象類不能實例化,及不能用new來實例化抽象類;
  • 抽象類能夠包含屬性、方法、構造方法。可是構造方法不能用來new實例,只能用來被子類調用;
  • 抽象類只能用來繼承;
  • 抽象方法必須被子類實現。

1.6 模板模式的一些簡單規則:

①抽象父類能夠只定義須要使用的某些方法,其他則留給其子類實現

②父類中可能包含須要調用的其餘系列方法的方法,這些方法既能夠由父類實現,也能夠由其子類實現。父類裏提供的方法只是定義了一個通用算法,其實現也許並不徹底由自身實現,而必須依賴於其子類的輔助。

 

2. 接口體現的是規範和實現分離的設計哲學

2.1 接口與抽象類:

(1)接口中的全部方法都是抽象的,而抽象類能夠定義帶有方法體的不一樣方法

(2)一個類能夠實現多個接口,但只能繼承一個抽象父類

(3)接口與實現它的類不構成類的繼承體系,即接口不是類體系的一部分,所以,不相關的類也能夠實現相同的接口。而抽象類是屬於一個類的繼承體系,而且通常位於類體系的頂層。

接口做爲系統與外界交互的窗口,接口體現的是一種規範。規定了實現者必須向外提供哪些服務;調用者能夠調用哪些服務,以及如何調用;當在一個程序中使用接口時,接口是多個模塊間的耦合標準;多個應用程序之間使用接口時,接口是多個程序之間通訊標準。

接口相似於整個系統的「總綱」,制定了系統各模塊應該遵循的標準,所以一個系統中的接口不該該常常改變。
抽象類做爲系統中多個子類的共同父類,它所體現的是一種模板式設計。

2.2 使用接口的主要優點:

       一是類經過實現多個接口能夠實現多重繼承,這是接口最重要的做用,也是使用接口最重要的緣由——可以使子類對象上溯造型爲多個基礎類(接口)類型。另外一個優點是可以抽象出不相關類之間的類似性,而沒有強行造成類的繼承關係。若是要建立的類體系的基礎類不須要定義任何成員變量,而且不須要給出任何方法的完整定義,則應該將基礎類定義爲接口。只有在必須使用方法定義或成員變量時,才應該考慮採用抽象類。

因爲接口定義的是一種規範,所以接口裏不能包含構造器和初始化塊定義。接口裏能夠包含屬性(public static final)、方法(public abstract)、內部類(public static)和枚舉類定義(public static)。實現方法時,必須使用public修飾符。

接口不能用於建立實例,但接口能夠用於聲明引用類型的變量。當使用接口來聲明引用類型的變量時,這個引用類型的變量必須引用到其實現類的對象。

2.3 java 8 接口增長了默認方法和靜態方法(只有接口有默認方法)

默認方法的目的:

      須要修改接口時,不用修改所有的實現類。解決接口的修改和現有的實現不兼容的問題。

修飾接口方法的修飾符只能是:only public, abstract, default, static and strictfp are permitted

靜態方法:static修飾,接口可聲明實現。不可寫成抽象方法的形式。

 

2.4 接口方法爲何是public?

     接口是規範,定義公共的行爲與狀態。實現類不必定在一個包裏,不能繼承接口,因此也不能是子類,private修飾等於沒用。

2.5 屬性變量爲何是public static final

     public同上。static和final並不用於避免同名,以下。它是在同名的狀況下能夠經過接口名.變量名區分調用哪一個接口下的變量。final:不容許實現類修改(全部類必須遵照)

相關文章
相關標籤/搜索