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