day15——面向?qū)ο?多態(tài)性)
一、上節(jié)課回顧
1、匿名對(duì)象:
new 構(gòu)造方法();
就是沒有名字的對(duì)象。隨著被創(chuàng)建而使用一次。(一次性)。
? ? new 構(gòu)造方法().方法名();
? ? new 構(gòu)造方法().方法名();
2、面向?qū)ο蟮娜筇卣鳎?/p>
A:封裝性:"打包",
方法的封裝。
類的封裝。
屬性:成員變量,給對(duì)象使用的。
對(duì)象.屬性--->賦值,取值
對(duì)象.方法--->對(duì)象將方法調(diào)用
變量:
直接寫在類里:成員變量,描述這個(gè)類別的外部特征。使用變量
直接寫在方法里:局部變量,存儲(chǔ)數(shù)據(jù)。
classPerson{
? ? privateintage;//人的年齡:[0,150]
publicvoidsetAge(intage){
if(如果age合理){
this.age=age;
}else{
//不合理的數(shù)據(jù),不要賦值了
? ? ?? }
?? }
publicintgetAge(){
returnthis.age;
?? }
?
}
?
classTest1{
publicstaticvoidmain(String[]args){
Personp1=newPerson();
p1.age=-1000;//賦值,取值
?? }
}
如何對(duì)屬性進(jìn)行封裝?訪問(wèn)權(quán)限修飾符:private default protected public
step1:使用private修飾屬性
使用private修飾的成員變量,方法,都限制在本類內(nèi)訪問(wèn)
step2:提供setter方法,用于給屬性賦值
step3:提供getter方法,用于取值
屬性的類型是boolean類型,isXXX(){}
設(shè)計(jì)一個(gè)類的原則:
屬性封裝,private,提供get和set方法
方法要public
提供無(wú)參構(gòu)造
B:繼承性:兩個(gè)類的關(guān)系。
一個(gè)類B類,繼承了另一個(gè)類A類。
A類:父類,基類,超類,SuperClass
B類:子類,派生類 ,SubClass
繼承的作用?
提高類的可重用性。類的擴(kuò)展。
模擬現(xiàn)實(shí)
一個(gè)子類繼承了一個(gè)父類?
子類可以直接使用父類的非私有化的屬性和方法。
子類可以新增自己的屬性和方法。
子類可以將父類已有的方法重新實(shí)現(xiàn)。方法的重寫。
語(yǔ)法:關(guān)鍵字:extends,詞義:擴(kuò)展
C:多態(tài)性
二、本節(jié)課內(nèi)容
第一周:基本語(yǔ)法,規(guī)則
第二周:分支,循環(huán),邏輯性,方法,數(shù)組:引用類型的數(shù)組。棧,堆。。。
第三周:思想,規(guī)則:
類
對(duì)象
new
構(gòu)造方法
創(chuàng)建對(duì)象
內(nèi)存分析
訪問(wèn)屬性
賦值,取值
訪問(wèn)方法
this
。。。
2.1、子類對(duì)象的創(chuàng)建過(guò)程
實(shí)例化子類對(duì)象的過(guò)程:
1、先調(diào)用父類的構(gòu)造方法
默認(rèn)調(diào)用父類的無(wú)參構(gòu)造方法。
2、再調(diào)用子類的構(gòu)造方法
我們通過(guò)代碼演示,發(fā)現(xiàn)當(dāng)創(chuàng)建子類對(duì)象的時(shí)候,默認(rèn)會(huì)先調(diào)用父類的構(gòu)造方法。
調(diào)用子類的構(gòu)造方法中,先調(diào)用了父類的構(gòu)造方法,默認(rèn)調(diào)用的父類的無(wú)參構(gòu)造方法。
1、子類的構(gòu)造方法中,第一行一定是調(diào)用了父類的構(gòu)造方法。
2、如果沒有顯示的調(diào)用父類的構(gòu)造方法,那么編譯器會(huì)自動(dòng)添加一個(gè):super(),父類的無(wú)參構(gòu)造方法。
3、子類的構(gòu)造方法中,既可以調(diào)用父類的無(wú)參構(gòu)造方法,也可以調(diào)用父類的有參構(gòu)造方法。
4、父類的構(gòu)造方法:
? ? ? ? 無(wú)參構(gòu)造:super();
? ? ? ? ? ? 有參構(gòu)造:super(參數(shù));
2.2、super關(guān)鍵字
用法一:super(),指代父類的構(gòu)造方法。
如果有多個(gè)父類的構(gòu)造方法,那么要靠參數(shù)區(qū)分。
super(),無(wú)參構(gòu)造
super(參數(shù)),父類的有參構(gòu)造方法。。
注意點(diǎn):super(),指代父類的構(gòu)造方法,一定是位于第一行。同this()指代本類構(gòu)造方法。
方法二:直接訪問(wèn)父類的屬性和方法
super.屬性--->父類的屬性。
super.方法--->父類的方法
this.屬性
this.方法
2.3、方法的重寫
重載(overload):一個(gè)功能方法的多種寫法。
同一個(gè)類中,方法名必須一致,參數(shù)列表必須不同。
重寫(override):繼承結(jié)構(gòu)。
概念:在繼承結(jié)構(gòu)中,子類將父類已有的方法,重新實(shí)現(xiàn),這叫方法的重寫。
如果在子類中,存在方法的重寫,那么默認(rèn)調(diào)用的是重寫之后的方法。
方法重寫的規(guī)則:
1、繼承結(jié)構(gòu)中。
2、方法的聲明,必須和父類的一致。
? ? 方法名必須和父類一致
? ? 參數(shù)列表必須和父類一致
? ? 返回值必須和父類一致
3、訪問(wèn)權(quán)限,不能比父類更加嚴(yán)格。
4、子類重寫的方法,不能拋出比父類更大更多的異常。
/*
? ? ? ? * 1.父類的方法,訪問(wèn)權(quán)限:public
? ? ? ? * ? 子類重寫,只能public
? ? ? ? * 2.父類的方法,訪問(wèn)權(quán)限:protected
? ? ? ? * 子類重寫,protected,public
? ? ? ? * 3.父類的方法,訪問(wèn)權(quán)限:default
? ? ? ? * 子類重寫,default,protected,public
? ? ? ? * 4.父類的方法,訪問(wèn)權(quán)限:private
? ? ? ? ? 對(duì)于子類來(lái)講,該方法根本不可見。
? ? ? ? */
2.4、訪問(wèn)權(quán)限修飾符
訪問(wèn)權(quán)限:就是在哪能訪問(wèn)。通過(guò)訪問(wèn)權(quán)限修飾符來(lái)實(shí)現(xiàn)。
作用:限制可見度。
private:私有的。本類中。
默認(rèn)的:(default):注意,啥修飾符都不寫,就是默認(rèn)的。本類。同包下可以訪問(wèn)。
protected:受保護(hù)的。本類,同包下,不同包(子類使用)
public,沒有限制的。
private---> default--->protected--->public
使用原則:
修飾類:只能是public和default
修飾成員:變量和方法:以上4個(gè)修飾符都可以。
局部變量,不能使用這些修飾符。
2.5、對(duì)象的多態(tài)性
2.5.1 什么是多態(tài)
其實(shí)就是事物的多種形態(tài)。
類的實(shí)例:new出來(lái)的---->對(duì)象。
父類:Animal
? ? 屬性:name,age
? ? 方法:eat(),sleep()
子類:Cat
? ? 新增屬性:color
? ? 新增方法:catchMouse()
? ? 重寫方法:eat()
子類:Dog
? ? 新增方法:lookDoor()
? ? 重寫方法:eat()
?
Animal a1 = new Animal();//a1能夠訪問(wèn)的是父類的屬性和父類的方法
Cat c1 = new Cat();//c1能夠訪問(wèn)name,age,子類新增color。sleep(),子類重寫eat,子類新增catchMouse()
?
Dog d1 = new Dog();//d1父類屬性:name,age,方法:sleep(),子類重寫eat(),子類新增lookDoor()
?
結(jié)論:對(duì)于子類對(duì)象,如果方法存在重寫, 那么一定是調(diào)用重寫之后的方法。
2.6、向上轉(zhuǎn)型和向下轉(zhuǎn)型
向上轉(zhuǎn)型:一個(gè)子類對(duì)象看成了父類類型。那么就失去了子類新增。
Animal a2 = new Cat();//
a2,本身是子類對(duì)象,但是看成父類類型。
那么能夠訪問(wèn)父類的屬性,不能訪問(wèn)子類的新增屬性。
能夠訪問(wèn)方法,以及子類重寫的方法。
三、總結(jié)
1、子類對(duì)象的創(chuàng)建過(guò)程:(知道)
1、子類的構(gòu)造方法的第一行,一定是調(diào)用了父類的構(gòu)造方法。如果沒有,那么編譯器自動(dòng)添加:super();
2、先調(diào)用父類的構(gòu)造,然后再執(zhí)行子類的構(gòu)造。
2、super關(guān)鍵字:(記?。?/p>
用法一:指代父類的構(gòu)造方法。super()。位于第一行。
用法二:直接訪問(wèn)父類的屬性和方法。
3、方法的重寫:(會(huì)用)
概念:繼承關(guān)系中,子類將父類已有的方法重新實(shí)現(xiàn)。
英文:override
規(guī)則:
4、訪問(wèn)權(quán)限:訪問(wèn)權(quán)限修飾符,用于控制可見度。(知道)
private:本類
default:本類,同包
protected:本類,同包,不同包(限于繼承結(jié)構(gòu))
public:沒有限制
5、對(duì)象的多態(tài)性:(未完待續(xù)。。)
向上轉(zhuǎn)型:將子類的對(duì)象,看成父類的類型。就"失去"了子類的新增。
四、作業(yè)
1、課堂代碼敲3遍
2、。。。
3、預(yù)習(xí)明天內(nèi)容: