Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态
面向對象的特征:封裝、繼承、多態、(抽象)
一、封裝
體現形式:
函數 --- 提高代碼的復用性。
屬性的私有化 --- 將屬性設為私有,通過提供對外的訪問方法來間接操作對象屬性,可以再方法內對屬性做一系列的限制使其符合要求 ---- 提高代碼的安全性。
擴充: 權限修飾符
public ?:本類、子類、同包類、其他類。
protected : 本類、子類、同包類。
default : 本類、同包類、同包子類
private : 本類
二、繼承
對一些類的屬性和方法進行提取,提取出來一個新的類。通過extends關鍵字使新的類 與舊類產生繼承關系。新類稱之為父類、超類、基類,而舊的類稱之為子類、派生類
注意:
java中只支持單繼承 --- 一個子類只能有一個父類 ,而一個父類可以有多個子類。
優點:
1. 提高代碼安全性。
2. 提高代碼復用性。
3.?統一代碼結構。
super關鍵字:
在創建子類對象時,會先創建一個父類對象,而這個父類對象在子類中以super關鍵字的形式存在。
super是父類對象的引用,可以認為是父類產生的一個虛擬對象。
如果一個構造函數中已經存在了this關鍵字,那么此時不能再寫super語句。
super()語句必須放在首行。
調用super()語句時會自動匹配父類中對應形式的構造函數。
問:
1. 子類的每個構造函數都間接或直接的有一個super語句?
解: 正確。
子類繼承父類后,子類的構造函數再編譯時JVM會默認添加(隱式定義)一個無參的super()語句。 ?--- 直接
在子類的某個構造函數中用this語句調用另一個構造函數,此時不能直接再寫super語句。但是this()語句調用的構造函數中會有默認的(隱式定義的)super()語句或顯示定義的super(args[])語句 --- 間接
2. 如果父類中只提供了含參構造,子類的構造函數還能使用默認的super語句么?
解 : 不能。
每一個類都有構造函數。當用戶沒有定義構造函數時,JVM會自動添加一個無參構造,當用戶定義了有參構造后,JVM將不在提供無參構造。
在創建子類對象時會先 創建父類對象,super關鍵字是對父類對象的引用,而默認的super()語句實際是調用父類的無參構造,所以當父類定義有參構造后,子類將不能繼續使用默認的super()語句,而是由用戶調用super(args[])
3. 可以通過this來調用父類中的屬性或方法么?
解: 可以
子類使用this關鍵字調用屬性或方法的時候,會先檢查當前類中是否有對應的屬性,如果沒有則在檢查父類。
重寫:
在父子類 中,如果存在類方法簽名一致的方法,則成為函數的重寫|覆蓋 ? ? (方法簽名 : 方法名+參數列表)
注意:
重寫必須遵守五個原則:兩等兩小一大
1. 方法簽名一致
2. 當父類中的方法返回值類型是基本數據類型、void、最終類,子類重寫方法的返回值類型必須一致。
3. 當父類中方法返回值類型是引用數據類型的時候,子類方法的返回值類型要么和父類一致,要么子類方法返回值類型是父類方法返回值類型的子類。
4. 當父類中拋出異常聲明時,子類拋出的異常聲明必須是父類拋出異常聲明的子類。
5. 子類方法的權限修飾符應該 大于 或等于父類方法的權限修飾符。
三、多態
注意:
使用向上造型創建對象的時候,用父類聲明,用子類創建;父類再聲明時就相當于k==geile這個對象一份提綱;子類創建對象時是告訴這個對象該怎么干 ---- 能不能用看父類,具體實現看子類。
重寫的理解:
1. 方法簽名一致
解釋: 重寫的概念。
2. 當父類中的方法返回值類型是基本數據類型、void、最終類,子類重寫方法的返回值類型必須一致。
解釋: 向上造型 時,需要使用父類對象的方法接受子類重寫后方法的返回值,如果是引用數據類型,則可以使用父類接受子類,此時要求父類中方法的返回值類型等于或者是子類方法返回值類型的父類;如果是基本數據類型,由于八種基本數據類型是相互平等的,不存在繼承關系,所以返回值類型要求一致。
3. 當父類中方法返回值類型是引用數據類型的時候,子類方法的返回值類型要么和父類一致,要么子類方法返回值類型是父類方法返回值類型的子類。
解釋: 向上造型 時,需要使用父類對象的方法接受子類重寫后方法的返回值,如果是引用數據類型,則可以使用父類接受子類,此時要求父類中方法的返回值類型等于或者是子類方法返回值類型的父類;如果是基本數據類型,由于八種基本數據類型是相互平等的,不存在繼承關系,所以返回值類型要求一致。
4. 當父類中拋出異常聲明時,子類拋出的異常聲明必須是父類拋出異常聲明的子類。
解釋:向上造型時,父類中拋出的異常聲明必須要能接住子類拋出的異常聲明,所以要求父類中拋出的異常聲明是子類中拋出的異常聲明的父類。
5. 子類方法的權限修飾符應該 大于 或等于父類方法的權限修飾符。
解釋: 向上造型時,調用方法看父類,具體執行看子類,所以要求父類中方法能執行的地方子類中方法也要能執行,所以子類中權限修飾符的范圍必須大于或等于父類中方法的權限修飾符。
多態的產生就是為了解耦.
總結
以上是生活随笔為你收集整理的Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java面向对象(一)面向对象简介和初步
- 下一篇: Java面向对象(三)Static