[TOC]
## 封裝
### 定義
隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別。
### 目的
增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過外部接口,一特定的訪問權限來使用類的成員。
### 要求
把所有的屬性私有化,對每個屬性提供getter和setter方法,如果有一個帶參的構造函數的話,那一定要寫一個不帶參的構造函數。在開發的時候經常要對已經編寫的類進行測試,所以在有的時候還有重寫toString方法,但這不是必須的。
## 繼承
### 目的
實現代碼的復用。
### 介紹
當兩個類具有相同的特征(屬性)和行為(方法)時,可以將相同的部分抽取出來放到一個類中作為父類,其它兩個類繼承這個父類。繼承后子類自動擁有了父類的屬性和方法,但特別注意的是,父類的私有屬性和構造方法并不能被繼承。另外子類可以寫自己特有的屬性和方法,目的是實現功能的擴展,子類也可以復寫父類的方法即方法的重寫。子類不能繼承父類中訪問權限為private的成員變量和方法。子類可以重寫父類的方法,及命名與父類同名的成員變量。有時候我們需要這樣的需求:我們需要將某些事物盡可能地對這個世界隱藏,但是仍然允許子類的成員來訪問它們。這個時候就需要使用到protected。
## 多態
### 概念
相同的事物,調用其相同的方法,參數也相同時,但表現的行為卻不同。
### 條件
Java實現多態有三個必要條件:繼承、重寫、向上轉型。
* 繼承:在多態中必須存在有繼承關系的子類和父類。
* 重寫:子類對父類中某些方法進行重新定義,在調用這些方法時就會調用子類的方法。
* 向上轉型:在多態中需要將子類的引用賦給父類對象,只有這樣該引用才能夠具備技能調用父類的方法和子類的方法。
?????只有滿足了上述三個條件,我們才能夠在同一個繼承結構中使用統一的邏輯實現代碼處理不同的對象,從而達到執行不同的行為。
### 實現方式
#### 基于繼承實現的多態
??????基于繼承的實現機制主要表現在父類和繼承該父類的一個或多個子類對某些方法的重寫,多個子類對同一方法的重寫可以表現出不同的行為。
#### 基于接口實現的多態
??????繼承是通過重寫父類的同一方法的幾個不同子類來體現的,那么就可就是通過實現接口并覆蓋接口中同一方法的幾不同的類體現的。
??????在接口的多態中,指向接口的引用必須是指定這實現了該接口的一個類的實例程序,在運行時,根據對象引用的實際類型來執行對應的方法。
??????繼承都是單繼承,只能為一組相關的類提供一致的服務接口。但是接口可以是多繼承多實現,它能夠利用一組相關或者不相關的接口進行組合與擴充,能夠對外提供一致的服務接口。所以它相對于繼承來說有更好的靈活性。
## 接口與抽象類的區別
### 不同點
1. 接口可以多實現,而抽象類只能單繼承
2. 抽象類可以有非抽象的方法和構造方法、變量,但是接口只能有抽象方法,靜態常量。
3. 抽象類和子類具有父子關系,子類能擁有父類中一些屬性。接口雖然某個類實現一個接口,但是由于接口中的變量都為靜態常量,不存在繼承關系。
### 相同點
1. 無論接口還是抽象類,都無法直接實例化,其自身實例化需要靠實現類或子類來實現
## 推薦閱讀
[java 面向對象三大特性(封裝,繼承,多態)以及抽象、接口的介紹](https://blog.csdn.net/qq_22118507/article/details/51422591)
- Java
- Object
- 內部類
- 異常
- 注解
- 反射
- 靜態代理與動態代理
- 泛型
- 繼承
- JVM
- ClassLoader
- String
- 數據結構
- Java集合類
- ArrayList
- LinkedList
- HashSet
- TreeSet
- HashMap
- TreeMap
- HashTable
- 并發集合類
- Collections
- CopyOnWriteArrayList
- ConcurrentHashMap
- Android集合類
- SparseArray
- ArrayMap
- 算法
- 排序
- 常用算法
- LeetCode
- 二叉樹遍歷
- 劍指
- 數據結構、算法和數據操作
- 高質量的代碼
- 解決問題的思路
- 優化時間和空間效率
- 面試中的各項能力
- 算法心得
- 并發
- Thread
- 鎖
- java內存模型
- CAS
- 原子類Atomic
- volatile
- synchronized
- Object.wait-notify
- Lock
- Lock之AQS
- Lock子類
- 鎖小結
- 堵塞隊列
- 生產者消費者模型
- 線程池