1. Java中OOP的特點?
OOP(Object Oriented Programming):面向對象編程。具有封裝、繼承、多態三大特征。
封裝:解決數據安全性問題;
繼承:解決代碼的重用性問題;
多態:解決程序擴展問題。
1.1 封裝
封裝:隱藏對象的屬性和實現細節,僅對外提供可調用、穩定的公共訪問方式。
封裝優點:
1. 類具有獨立性和隔離性,保證類的高內聚;
2. 避免使用非法數據賦值,降低出錯可能性,便於維護;
3. 避免類內部實現發生改變時,導致整個程序的改變。
封裝實現:對象的屬性聲明為private(私有),並提供合理public(公有)的get/set方法以供外部使用。
權限區域:
修飾符 同一類中 同一包中 子類 全局范圍
public √ √ √ √
protected √ √ √
default(默認) √ √
private √
1.2 繼承
在Java中,類的繼承通過extends關鍵字實現,接口得繼承通過implements是實現。繼承以類繼承講述,在沒有特殊標記下,下面將的繼承均是類繼承。
繼承描述:從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新能力
繼承優點:代碼變的簡潔;增加代碼的可重用性、擴展性。
繼承特點:傳遞性,單根性,使用super條用父類成員,默認先調父類的無參構造函數。
繼承是IS-A關系,沒有繼承類是,則本類直接繼承Object類。
繼承條件下的構造函數調用:調用構造器時只能在構造器第一行調用。
1. 子類構造器沒有super關鍵字,默認調用父類的午餐構造器;
2. 子類構造器有super關鍵字,則調用父類相關的構造器;
3. 子類構造器有this關鍵字,調用本類的構造器,禁用上面的兩條規則。
1.3 多態
多態的三個條件:
1. 繼承的存在,繼承是多態的基礎,沒有繼承就沒有多態
2. 子類重寫父類的方法
3. 父類引用變量執行子類對象(向上轉型,里式替換原則,子類到父類的類型裝換)
面向對象的多態性主要體現在重寫和重載兩個方面。
重載:同名方法,不同參數(個數、類型、位置),與返回值無關,適用所有的(構造,靜態,實例)方法。
重寫:子類繼承父類的方法,如果想在原來基礎修改方法,需要采取方法重寫。方法重寫稱為覆蓋。
多態實現:同一類的不同子類對象對同一個方法調用產生的不同結果叫多態。
多態優點:不用修改程序代碼就可以改變程序動態運行時綁定的具體代碼;
增強了軟件的靈活性和擴展性。
父類中定義的方法,子類重寫方法,父類類型會調用子類的方法,否則調用父類定義的方法。
3. 接口與實現類的區別
語法層面:
1. 抽象類可以提供成員方法的實現細節,接口方法只能是public abstract方法
2.抽象類可以是各種類型,接口中成員變量只能是public static final;
3. 抽象類可以有靜態代碼塊和靜態方法,有接口中不能含有靜態代碼塊以及靜態方法
4. 一個類只能繼承一個抽象類,一個類可以實現多個接口
設計層面層面:
5. 抽象類是對事物的抽象是對類的抽象,接口是對行為的抽象
6. 抽象類是對類整體進行抽象包括屬性、行為,接口是對類局部(行為)進行抽象
7. 抽象類是模板式設計,而行為是一種輻射設計(必須實現方法)