## 抽象類與接口
### 抽象類是啥~
官方:抽象類往往用來表征對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。
> 官方的解釋果然抽象~
民間: 在面向對象的概念中,世間萬物通過類來描繪的,但如果一個類中沒有包含足夠的信息來描繪一個具體的事物對象,這樣的類就是抽象類。
*****
場景:比如說,我們熟悉的中華田園犬、泰迪、二哈等等大小形態各有不同,我們怎么把他們抽象一下呢?那就是他們都有一些本質上相同的東西那就是他們都是狗,是狗就有耳朵,尾巴,四肢等等,我們把這些特征給抽象出來就可以形成一個抽象類,至于耳朵是啥樣的,尾巴是長是短,顏色是啥,這就需要具體的子類實現狗這個抽象方法了。
<i></i>
這就是面向對象的基本特性:抽象~ 也是比較難的能力~
### 那抽象類的作用呢~
1. 用于**隱藏**
> 對類型進行隱藏,我們可以構造出一組固定行為的抽象描述,一個行為可以有任意個可能的具體實現方式。這個抽象的描述就是抽象類。(參考多態)
2. 用于**拓展**對象的行為功能
> 因為抽象相對穩定,讓其他類(模板)依賴于固定的抽象;同時通過這個抽象類進行派生,派生出任意個可能的具體實現,拓展此模塊的行為功能。(參考開放閉合原則)
### 接口是啥~
官方:接口泛指實體把自己提供給外界的一種抽象化物(可以為另一實體),用以由內部操作分離出外部溝通方法,使其能被內部修改而不影響外界其他實體與其交互的方式。
> 呵呵呵~
民間: 接口就是一種特殊的abstract class,但是比abstract class更加抽象。
*****
場景:很多時候,我們實際上關心的,并不是對象的類型,而是對象的**能力**,
譬如要拍個照片,很多時候,只要能拍出符合需求的照片就行,至于是用手機拍,還是用Pad拍,或者是用單反相機拍,并不重要,關心的是對象是否有拍出照片的能力,而并不關心對象到底是什么類型,手機、Pad或單反相機都可以。
**類型并不重要,重要的是能力**。
### 那抽接口的作用呢~
1. 由于Java單繼承的原因,接口作為繼承關系的一個補充(多繼承)完成了曲線救國。
2. 把程序模塊進行固化的契約,降低偶合。把若干功能拆分出來,按照契約來進行實現和依賴。(依賴倒置原則)
3. 定義接口有利于代碼的規范。(接口分離原則)
來張對比圖

### 內部類
定義
>把類定義在另一個類的內部,該類就被稱為內部類。
訪問規則
* 擁有外部類的引用,可以直接訪問外部類的成員,包括私有。
* 外部類要想訪問內部類成員,必須創建對象。
分類:
- 成員內部類
- 局部內部類
- 靜態內部類
- 匿名內部類
好處:
- 封裝性(高內聚,低耦合)
> 內部類可以很好的實現隱藏,隱藏你不想讓別人知道的操作,也即封裝性。平時我們對類的訪問權限,都是通過類前面的訪問修飾符來限制的,一般的非內部類,是不允許有`private`與`protected`權限的,但內部類可以,所以我們可以通過內部類來隱藏我們的信息,實現更好的封裝。
- 實現多繼承
>使用接口實現多繼承的時候,是有一點弊端的,那就是,一旦實現一個接口就必須實現里面的所有方法,有時候就會出現一些累贅,但是使用內部類可以很好的解決這些問題。
- 匿名內部類實現回調功能
> 回調就是某個方法一旦獲得了內部類對象的引用之后,就可以在合適的時候反過來去調用外部類實例的方法,也即允許客戶類通過內部類引用調用外部類的方法。這種功能非常的靈活。
- 解決繼承及實現接口出現的同名方法的問題
> 一個類需要實現一個接口,還需要繼承一個類,但是要實現的這個接口和要繼承的類中有個一模一樣的方法,就可以建一個內部類實現這個接口。
### 結語
抽象類,相對于具體類,它用于表達抽象概念,雖然從語法上,抽象類不是必須的,但它能使程序更為清晰,減少誤用,抽象類、接口、抽象類經常相互配合,接口定義能力,而抽象類提供默認實現,方便子類實現接口。
*****
### 引用與參考
[https://blog.csdn.net/aptentity/article/details/68942916](https://blog.csdn.net/aptentity/article/details/68942916)
[https://www.cnblogs.com/swiftma/p/5594961.html](https://www.cnblogs.com/swiftma/p/5594961.html)
[https://www.cnblogs.com/littlecarry/p/11939809.html](https://www.cnblogs.com/littlecarry/p/11939809.html)
[https://www.jianshu.com/p/c4f023d02f0c](https://www.jianshu.com/p/c4f023d02f0c)
[http://blog.longjiazuo.com/archives/4807](http://blog.longjiazuo.com/archives/4807)
[https://www.zhihu.com/question/26954130](https://www.zhihu.com/question/26954130)