面向?qū)ο笕筇卣鞫鄳B(tài)

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)容:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容