<small>
1赊窥、多態(tài)
1)、兩種表現(xiàn)形式:
a狸页、一個(gè)對(duì)象锨能,多種形態(tài)。
同一個(gè)對(duì)象芍耘,在不同場(chǎng)合下址遇,
表現(xiàn)出不同的形態(tài),能完成不同的功能斋竞。
在java中倔约,往往使用implements關(guān)鍵字,實(shí)現(xiàn)多個(gè)接口坝初。
//同一個(gè)人
CC peo = new CC();
//同一個(gè)人浸剩,在不同的場(chǎng)合钾军,表現(xiàn)出不同的形態(tài)
//不同角色,表現(xiàn)的行為也不一樣绢要。
Teacher teacher = peo;
teacher.teach();//老師可以講課
Father father = peo;
father.talkToSon();//父親教育孩子
Husband husband = peo;
husband.giveMySalary();//丈夫上交工資
b吏恭、多個(gè)對(duì)象,同一形態(tài)重罪。
不同對(duì)象樱哼,向上造型成同一種類型。
實(shí)現(xiàn)相同的功能蛆封。
在java中唇礁,往往使用extends關(guān)鍵字,繼承同一個(gè)父類惨篱。
Tiger tiger = new Tiger();
tiger.name = "小王";
Snake snake = new Snake();
snake.name = "莽山烙鐵頭";
Lion lion = new Lion();
lion.name = "東北獅王";
//不同對(duì)象盏筐,表現(xiàn)出同一種形態(tài)。
Animal animal1 = tiger;
Animal animal2 = snake;
Animal animal3 = lion;
2砸讳、引用類型強(qiáng)制類型轉(zhuǎn)換
回顧:基本類型強(qiáng)制類型轉(zhuǎn)換
long l = 1000;
int i = (int)l;
byte b = (byte)i;//溢出
Animal animal = new Tiger();
animal.name = "小王";
//引用類型強(qiáng)制類型轉(zhuǎn)換
Lion lion = (Lion)animal;//錯(cuò)誤琢融,會(huì)導(dǎo)致類型轉(zhuǎn)換異常ClassCastException
instanceof關(guān)鍵字:
可用于在引用類型轉(zhuǎn)換之前,實(shí)現(xiàn)類型判斷簿寂。
符合轉(zhuǎn)換匹配的類型漾抬,方能實(shí)現(xiàn)強(qiáng)制類型轉(zhuǎn)換。
有效的避免了引用類型轉(zhuǎn)換異常的發(fā)生常遂。
語(yǔ)法:
大類型 大類型引用 = new 小類型();
if(大類型引用 instanceof 小類型){//類型判斷
//類型匹配
小類型 小類型引用 = (小類型)大類型引用;
}
//引用類型強(qiáng)制類型轉(zhuǎn)換
Lion lion = (Lion)animal;//錯(cuò)誤
改造成
if(animal instanceof Lion){
//只有匹配才能進(jìn)來(lái)
Lion lion = (Lion)animal;
}
3纳令、方法重寫要求:
a、發(fā)生在子父類之間
b克胳、方法名相同平绩、參數(shù)列表相同
c、訪問權(quán)限不能變小
d漠另、拋出異常不能變大
e捏雌、返回值類型可以是本類或其子類
********************** pm ************************
1、內(nèi)部類
class:類
class:實(shí)體類
abstract class:抽象類
1)笆搓、內(nèi)部類
定義在類內(nèi)部的類性湿,稱為內(nèi)部類。
類內(nèi)部:
類體满败、方法體肤频。
2)、內(nèi)部類定義
外部類:定義了內(nèi)部類的類算墨。
內(nèi)部類:定義在外部類中的類宵荒。
class Outer{//外部類
class Inner{//內(nèi)部類
}
}
只要是類,類中可定義:成員變量、方法骇扇、靜態(tài)塊。
3)面粮、內(nèi)部類的使用
a:創(chuàng)建內(nèi)部類對(duì)象
step1:先創(chuàng)建外部類對(duì)象。
step2:再通過(guò)外部類創(chuàng)建內(nèi)部類對(duì)象。
b勉失、在外部類外面
對(duì)內(nèi)部類屬性使用地技、方法調(diào)用
與普通類的屬性使用、方法調(diào)用一致柴底。
通過(guò)引用.屬性婿脸,引用.方法
c、內(nèi)部類中(**注意)
調(diào)用內(nèi)部類屬性:this.屬性;
調(diào)用外部類屬性:外部類名.this.屬性;
4)柄驻、內(nèi)部類意義
封裝在內(nèi)部類的中代碼狐树,不可以直接訪問,必須先創(chuàng)建
外部類對(duì)象鸿脓,通過(guò)外部類對(duì)象創(chuàng)建內(nèi)部類對(duì)象抑钟,才能訪問。
一定程度上野哭,起到了代碼保護(hù)效果在塔。
PS:普通內(nèi)部類很少使用。
2拨黔、匿名內(nèi)部類
1)蛔溃、匿名內(nèi)部類
class Outer{//外部類
class {//匿名內(nèi)部類?篱蝇?贺待??态兴?狠持?
}
}
上述定義是錯(cuò)誤的。
2)瞻润、匿名內(nèi)部類定義
某個(gè)類的匿名內(nèi)部類喘垂,并非直接在類中定義。
在外部類對(duì)象創(chuàng)建的時(shí)候定義绍撞。
step1:先創(chuàng)建外部類對(duì)象
OuterClass outer = new OuterClass();
step2:在外部類創(chuàng)建對(duì)象的()與;中間正勒,
添加一對(duì){},則{}即為匿名內(nèi)部類類體傻铣。
step3:匿名內(nèi)部類中可以定義屬性章贞、方法。
3)非洲、匿名內(nèi)部的使用鸭限。
匿名內(nèi)部類屬性蜕径,只能在匿名內(nèi)部類中使用。
匿名內(nèi)部類的方法败京,無(wú)法直接“調(diào)用”兜喻。
只能通過(guò)匿名內(nèi)部類重寫外部類的方法,才能調(diào)用赡麦。
4)朴皆、****什么時(shí)候使用匿名內(nèi)部類?
抽象類、接口都是無(wú)法實(shí)例化的泛粹。
抽象類 引用 = new 抽象類();//不可以
接口 引用 = new 接口();//不可以
如何實(shí)現(xiàn)抽象類遂铡、接口的“實(shí)例化”?
都是先讓實(shí)體類繼承抽象類晶姊,實(shí)現(xiàn)類實(shí)現(xiàn)接口扒接,
然后通過(guò)向上造型方式,完成抽象類们衙、接口的“實(shí)例化”珠增。
抽象類 引用 = new 實(shí)體類();//可以
接口 引用 = new 實(shí)現(xiàn)類();//可以
如果抽象類的實(shí)體類、接口的實(shí)現(xiàn)類砍艾,極少使用蒂教,
那作為單獨(dú)一個(gè)類出現(xiàn)就沒有多大意義。
實(shí)體類脆荷、實(shí)現(xiàn)類就可以通過(guò)匿名內(nèi)部類方式來(lái)實(shí)現(xiàn)凝垛。
2、封裝
封裝不是單純的知識(shí)點(diǎn)蜓谋,而是一種思想梦皮。
方法:對(duì)特定功能代碼的封裝
類:對(duì)具有相似特征,相同行為的對(duì)象群體的封裝桃焕。
對(duì)象特征 → 類的屬性
對(duì)象行為 → 類的方法
子父類:對(duì)繼承剑肯、公有代碼的封裝。
抽象方法:對(duì)沒有具體實(shí)現(xiàn)的方法進(jìn)行封裝观堂。
抽象類:對(duì)具有抽象方法的類让网、對(duì)代碼需要保護(hù)的類的封裝。
接口:對(duì)規(guī)范师痕、標(biāo)準(zhǔn)的封裝溃睹。
內(nèi)部類:對(duì)代碼保護(hù)封裝
匿名內(nèi)部類:對(duì)抽象類的實(shí)體類、接口的實(shí)現(xiàn)類的封裝胰坟。
單獨(dú)“封裝知識(shí)點(diǎn)”:
對(duì)于私有屬性因篇、私有方法,進(jìn)行封裝。
step1:采用private訪問權(quán)限修飾竞滓。
對(duì)屬性咐吼、方法,起到只能在本類中才能使用商佑。
step2:屬性賦值
方式一:
通過(guò)構(gòu)造方法汽烦,創(chuàng)建對(duì)象的同時(shí),
給私有屬性賦值莉御。
方式二:
當(dāng)屬性添加private訪問權(quán)限時(shí),則需要
對(duì)外提供統(tǒng)一的賦值俗冻、取值的方法入口礁叔。
賦值:set方法
取值:get方法
step3:編寫set、get方法
a迄薄、set方法:
private String name;
public void setName(String name){
this.name = name;
}
b琅关、get方法:
public String getName(){
return this.name;
}
步驟:
1、對(duì)私有屬性進(jìn)行private私有化操作讥蔽。
2涣易、對(duì)私有屬性向外提供統(tǒng)一的入口方法:set、get方法
為什么要私有化操作:
提高代碼的安全性冶伞。