Java基础点——面向对象(中)
雖然沒人看,但是也整理一下。這些都是個(gè)人重新復(fù)習(xí)java覺得需要注意的小知識(shí)點(diǎn)。
繼承性
a) class Students extends Person(){}
b) 子類:派生類 subclass
c) 父類:超類,基類,superclass
d) 一旦子類A繼承父類B以后,子類A中就獲取了父類B中聲明的結(jié)構(gòu):屬性和方法?包括父類的私有結(jié)構(gòu)
繼承的規(guī)定
a) 只支持單繼承和多層繼承,不允許多重繼承
b) 一個(gè)類只能有一個(gè)父類
c) 可以通過接口interface進(jìn)行擴(kuò)展
Object類和功能
a) Java.lang.Object類是所有的類的父類或者間接父類
Java assert()斷言關(guān)鍵字
a) 1、assert condition; .assert需要顯示的開啟生效才有作用。
這里condition是一個(gè)必須為真(true)的表達(dá)式。如果表達(dá)式的結(jié)果為true,那么斷言為真,并且無(wú)任何行動(dòng)
如果表達(dá)式為false,則斷言失敗,則會(huì)拋出一個(gè)AssertionError對(duì)象。這個(gè)AssertionError繼承于Error對(duì)象,
而Error繼承于Throwable,Error是和Exception并列的一個(gè)錯(cuò)誤對(duì)象,通常用于表達(dá)系統(tǒng)級(jí)運(yùn)行錯(cuò)誤。
方法的重寫(overwrite) ? 區(qū)分方法的重載(一個(gè)類中可以有多個(gè)不同參數(shù)列表的方法)
a) 在子類中,可以根據(jù)需要對(duì)父類中繼承來(lái)的方法來(lái)進(jìn)行改造,也稱為方法的重置、覆蓋。在程序執(zhí)行的時(shí)候,子類的方法將父類的方法覆蓋。
b) 要求
i. 子類的方法名必須 和父類被重寫的方法具有相同的名字和參數(shù)列表。
ii. 子類不可以降低可見性 ? 權(quán)限修飾符必須大于父類
iii. 特殊情況:父類中的private方法?無(wú)法被重寫
iv. 返回值類型:
Void:若父類為void 子類一定是void
若父類的返回值為A類 子類可以返回A類或者A類的子類
若父類為基本數(shù)據(jù)類型(基本數(shù)據(jù)類型 無(wú)子類),則子類只能使用相同的。
v. 子類重寫的方法拋出的異常類型 不大于 父類的異常類型
vi. 若非static?可以被重寫,若子類和父類都聲明為static,不是重寫!!
四種權(quán)限修飾
a) Private: 同一個(gè)類中,不可以在同一個(gè)包中其他的類調(diào)用
b) 缺省:同一個(gè)包
c) Protected:同一個(gè)包中,不同的包不能使用,除非是不同包的子類調(diào)用
d) Public 同一個(gè)工程
Super關(guān)鍵字的使用
a) 理解為:父類的
b) 子類重寫了父類的方法后,可以使用super關(guān)鍵字再次使用父類的方法
c) 默認(rèn)調(diào)用子類的屬性和方法,若想要調(diào)用父類的,使用super修飾
d) Super調(diào)用構(gòu)造器:
i. 在子類構(gòu)造器中使用super(形參列表),調(diào)用父類中聲明的指定的構(gòu)造器
ii. 構(gòu)造器中:Super(形參)必須聲明在子類構(gòu)造器的首行,
iii. This()和super()不能同時(shí)出現(xiàn)
iv. 子類構(gòu)造器首行若沒有顯式this()super() 默認(rèn)使用父類的空參構(gòu)造器
v. 因?yàn)樽宇悩?gòu)造器默認(rèn)要有this()或者super()
所以若子類沒有顯示this()super() || 父類沒有空構(gòu)造器,子類必須完善父類的有參數(shù)構(gòu)造器
vi. 類的多個(gè)構(gòu)造器中,至少有一個(gè)使用了super()構(gòu)造器
子類對(duì)象實(shí)例化的過程
a) 結(jié)果看:子類繼承父類之后,獲得父類的方法和屬性,在堆空間(heap)中,會(huì)加載所有父類的屬性
b) 過程來(lái)看:子類構(gòu)造器創(chuàng)建子類對(duì)象時(shí),會(huì)直接和間接的調(diào)用父類的構(gòu)造器,直到掉用到Object中的空參的構(gòu)造器為止—>所以子類才可以調(diào)用屬性和方法
面相對(duì)象的第三個(gè)屬性:多態(tài)性polymorphism—>只適用于方法,不適用于屬性
a) 一個(gè)事務(wù)的多種形態(tài)
b) 父類的引用指向子類的對(duì)象 Person per = new man();
c) 當(dāng)調(diào)用子類和父類同名參數(shù)的方法時(shí),實(shí)際執(zhí)行的是子類重寫父類的方法—虛擬方法調(diào)用
d) 但是無(wú)法調(diào)用子類的特有方法
e) 編譯器?只能調(diào)用父類中(左邊)申明的方法,實(shí)際執(zhí)行子類重寫的方法(右邊)
f) 編譯看左邊;運(yùn)行放右邊
g) 例:使用父類的引用,調(diào)用不同類型數(shù)據(jù)庫(kù)的方法
i. 方法 public void doData(Connection con){}
ii. 調(diào)用 public void doData(new MySQLConnection){}
iii. 這個(gè)例子中,方法參數(shù)的類Connection,可以根據(jù)傳入的不同的子類而使用不同子類的函數(shù),來(lái)操作不同類型的數(shù)據(jù)庫(kù)
多態(tài)特點(diǎn)
a) 多態(tài)是運(yùn)行時(shí)行為,屬于動(dòng)態(tài)綁定。只有方法調(diào)用的那一刻,解釋運(yùn)行期interpreter才知道所調(diào)用的具體方法,也成為后綁定。和方法重載相反。
b) 父類的方法成為虛擬方法,父類根據(jù)賦予給他的不同的子類對(duì)象,動(dòng)態(tài)調(diào)用屬于子類的該方法。這種方法調(diào)用是在編譯器無(wú)法確定的
向下轉(zhuǎn)型
a) 背景:動(dòng)態(tài)綁定不能調(diào)用子類特有的屬性和方法,編譯時(shí)是父類的類型
b) 如何調(diào)用特有的:Man m1 = (Man)p2; Man是P2的子類
c) 和基礎(chǔ)數(shù)據(jù)類型對(duì)比:自動(dòng)類型提升?向上轉(zhuǎn)型:多態(tài) 強(qiáng)制類型轉(zhuǎn)換—>向下轉(zhuǎn)型:使用instanceof判斷
Instanceof操作符
a) X instanceof A:檢驗(yàn)x是否為類A的實(shí)例,返回值為Boolean
Object類的使用
a) 所有java的跟父類,若未使用extends來(lái)指明父類,object為默認(rèn)父類
b) 只有一個(gè)空參構(gòu)造器
c) Clone()
d) Finalize()方法的使用,可以通過system.gc()通知系統(tǒng)進(jìn)行垃圾回收,垃圾回收機(jī)制在回收對(duì)象之前,總會(huì)先調(diào)用他的finalize方法。不主動(dòng)調(diào)用該方法
e) getClass()獲取對(duì)象當(dāng)前的類
f) hashCode()返回對(duì)象的hash值
g) notify(),wait() —> 線程相關(guān)
h) toString();
i) equal(Object obj);比較兩個(gè)對(duì)象是否相等
i. == 和 equal的區(qū)別
==是運(yùn)算符 可以使用在基本數(shù)據(jù)類型變量和引用類型數(shù)據(jù)變量中
a) 比較基本數(shù)據(jù)類型,比較兩個(gè)變量的保存的數(shù)據(jù)是否相等。(不一定要相同的類型)
b) 比較引用數(shù)據(jù)類型:比較兩個(gè)變量的地址值是否相等,是否指向同一個(gè)對(duì)象實(shí)體
Equals()的使用
a) 是一個(gè)方法而非運(yùn)算符
b) 只能適用于引用數(shù)據(jù)類型
c) Object類中的equals:return (this == obj); 和==作用相同
d) 對(duì)于String Date File 包裝類都重寫了equals()方法,比的是兩個(gè)對(duì)象的實(shí)體內(nèi)容是否相等
j) 自定義類手動(dòng)實(shí)現(xiàn)重寫Object.equals()
i. 使其比較對(duì)象實(shí)體內(nèi)容而并非引用數(shù)值。
重寫時(shí)比較String使用equals!!!String s == “aa” 時(shí),“aa”存在與常量池中
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj instanceof CLASS){
CLASS class = (CLASS)obj//強(qiáng)制轉(zhuǎn)換
//比較兩個(gè)對(duì)象的每個(gè)屬性是否相同
if(this.name == obj.name && this.id.equals(obj.id) ){//假設(shè)id為引用數(shù)據(jù)類型,name為基本數(shù)據(jù)類型
return true;
}else
return false;
}
//return this.name == obj.name && this.id.equals(obj.id)
}
toString()方法
a) 當(dāng)輸出一個(gè)對(duì)象的引用時(shí),就是調(diào)用該對(duì)象的toString方法,自定義類返回地址
b) String Date File 包裝類都重寫了toString方法。調(diào)用時(shí)直接返回實(shí)體內(nèi)容信息
c) 自定義類也可以重寫toString方法,返回是實(shí)體對(duì)象。
單元測(cè)試方法的使用
a) Junit單元測(cè)試,選中當(dāng)前過程
b) 創(chuàng)建java類進(jìn)行單元測(cè)試
包裝類(wrapper的使用)
a) 針對(duì)八種基本數(shù)據(jù)類型相應(yīng)的引用類型——包裝類, 使得基本數(shù)據(jù)類型也有類的特征
b) Byte, Short, Integer, Long, Float, Double—父類是Number
c) Character,Boolean
基本數(shù)據(jù)類型,包裝類,String之間的相互轉(zhuǎn)換
a) 基本數(shù)據(jù)類型與包裝類相互轉(zhuǎn)換
i. 裝箱 通過構(gòu)造器Integer I = new Integer(11); 自動(dòng)裝箱
ii. 拆箱 調(diào)用包裝類方法:xxxValue() 自動(dòng)拆箱
b) 基本數(shù)據(jù)類型與String
i. String類的ValueOf(3.4f) 3.4+””
ii. 調(diào)用包裝類ParseXxx(String)靜態(tài)方法 包裝類構(gòu)造器:boolean b = new Boolean(“true”);
c) 包裝類與String
i. 包裝類對(duì)象toString方法 調(diào)用包裝類toString(形參)
ii. 字符串傳參:Float f = new Float(“22.1F”);
iii. JDK:5.0新特性:自動(dòng)裝箱和拆箱
iv. 對(duì)于自動(dòng)裝箱
在Integer包中,定義了靜態(tài)的緩存數(shù)組范圍-128-127 IntegerCache[],方便自動(dòng)裝箱
若賦值Integer a = 1;則返回靜態(tài)數(shù)組的地址(自動(dòng)裝箱)
若賦值Integer a = 128;非自動(dòng)裝箱,會(huì)new一個(gè)對(duì)象
總結(jié)
以上是生活随笔為你收集整理的Java基础点——面向对象(中)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win8音频服务器未响应,大神为你详解w
- 下一篇: Java基础点:常用类