接口與抽象類概念

 接口是一個特殊的抽象類(僅限於JDK 1.8以下 1.8以上並不完全正確,後續更新)
 
 
一: 接口和抽象類相同點:
 1.接口和抽象類都是一種類型
 2.接口個抽象類都是不能實例化的.但是都可以用來聲明引用,指向實現類或具體子類的對象
(特別注意:****只要是接口實現類的泛化關係類 型的引用指向該實現類的對象,
滿足父類型的引用指向子類型對象,那麼該引用就可以被強制類型轉換爲此接口類型****)
 3.一個具體類繼承一個抽象類實現一個接口的時候,必須要實現抽象類或接口中全部的抽象方法
 4.一個類繼承一個抽象類或實現一個接口的時候,如果實現類抽象類或接口中全部的抽象方法,這個類可以聲明爲具體類,也可以聲明爲抽象類(因爲抽象類中可以沒有抽象方法)
 5.一個類繼承一個抽象類或實現一個接口的時候,如果只實現類抽象類或接口中部分的抽象方法,這個類必須聲明爲抽象類
 6.接口和抽象類都是屬於抽象層的     
 
二: 接口和抽象類不同點:
 
 1.抽象類中可以有實例屬性;而接口中沒有實例屬性,接口中的屬性會被自動的加上 public static final修飾符,都是公開的靜態的常量
 2.抽象類中可以有實例方法;而接口中沒有實例方法.接口中的方法都會被自動的加上 public abstract 修飾符.都是公開的抽象方法
 3.抽象類中可以有構造方法(供子類的構造方法調用);而接口中沒有構造方法
 4.內存中有抽象類的對象.而在內存中沒有接口的對象.
 5.類和類之間使用的是extends;類和接口之間使用的是implements
 6.類和類之間只能使用單繼承;接口和接口之間也可以使用繼承關係,而且是多繼承
 7.類和類之間只能使用單繼承.但是一個類可以同時實現多個接口
 
 
三:在抽象層中多態的體現
    用抽象類聲明引用,指向具體子類的對象或用接口聲明引用指向實現類的對象,都稱爲多態
     一個類繼承一個基類的同時,還可以實現多個接口
 
 
 
 在java中,接口和抽象類都是屬於抽象層的,那麼抽象層中何時使用接口?何時使用抽象類呢?
 (1)當抽象層中沒有任何實例屬性/實例方法,全部都是抽象方法的時候,應該使用接口.因爲JVM不需要創建接口的對象
 (2)當抽象層中既有實例屬性/實例方法,又有抽象方法的時候,必須要使用抽象類.因爲抽象類中可以有實例屬性實例方法,有可以有抽象方法
 
四:相關知識點
       我們知道,當一個類要實現一個接口必須要實現藉口中的所有方法,可是很多情況下我們只需要其中的一部分。
那麼我們能否讓一個具體類僅僅實現一個接口中部分的抽象方法呢?
解決方案:使用適配器模式(具體看設計模式之缺省適配器)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章