2020-04-11面向?qū)ο罂偨Y(jié)

一涯雅、編程思想

1鲜结、面向過程

面向過程:關注的是過程——步驟。

站在一個執(zhí)行者的角度考慮問題活逆,做事情轻腺。

2、面向?qū)ο?/p>

面相對向:關注的是對象——划乖。

站在一個指揮者的角度贬养。

是一種編程思想,不是一種編程語言琴庵。

如何使用面向?qū)ο蟮乃季S方式思考問題误算?

A:思考問題域中涉及到了哪些對象。

B:設計這些對象迷殿。(構(gòu)建類)

C:對象和對象之間的關系儿礼。

繼承關系:is - a

實現(xiàn)關系:實現(xiàn)類,實現(xiàn)接口庆寺。

依賴關系:一個類作為另一個類的方法的參數(shù)蚊夫。

關聯(lián)關系:一個類作為另一個類的屬性。

二懦尝、類和對象【重點】

2.1 類

概念:類知纷,就是類別壤圃。同一類事物的抽象描述。

- 類的屬性:成員變量琅轧,描述類的外部的特征的伍绳。選"名詞"。

- 類的功能:成員方法乍桂,描述類的行為功能的冲杀。選"動詞"。

示例代碼:

publicclassPerson{

? ? Stringname;

? ? intage;


? ? publicvoideat(){


? ? }

}

2.2 對象

概念:類中的一個具體的實例睹酌。

- 對象就是可以訪問類中的數(shù)據(jù):賦值权谁,取值

- 對象還可以執(zhí)行類中的方法:將方法進行調(diào)用。

2.3 實例化一個對象

就是通過調(diào)用類的構(gòu)造方法憋沿,進行創(chuàng)建對象旺芽,就得到了該類的實例。

Personp1=newPerson();

類和對象的關系:

將類進行實例化卤妒,就得到了對象甥绿。

如果將所有的對象的共同特征,進行抽取则披,然后加以描述共缕。就是構(gòu)建這個類。

2.4 構(gòu)造方法

構(gòu)造方法士复,又叫構(gòu)造器图谷,構(gòu)造函數(shù)。Constructor阱洪。

就是一個特殊的方法便贵。

1、作用:專門用于創(chuàng)建對象的冗荸。

2承璃、聲明:要區(qū)別于普通的方法。

? ? 修飾符:只允許訪問權(quán)限修飾符蚌本。

? ? 返回值:沒有盔粹,不能寫void。

? ? 方法名:必須和類名一致程癌。

? ? 參數(shù)列表:無參舷嗡,有參

3、調(diào)用:必須通過new關鍵字來調(diào)用嵌莉,開辟內(nèi)存进萄,創(chuàng)建對象。

注意點:

如果一個類中,沒有顯示的構(gòu)造方法中鼠,那么由編譯器自動添加一個可婶,無參構(gòu)造方法。

如果類中兜蠕,有了自己寫的構(gòu)造方法扰肌,那么編譯器不會再給添加任何的構(gòu)造方法抛寝。

示例代碼:

publicclassPerson{

? ? Stringname;

? ? intage;


publicvoidPerson(){}

publicvoidPerson(Stringname,intage){}


? ? publicvoideat(){


? ? }

}

編碼習慣:

私有化屬性

提供getter和setter方法

添加無參構(gòu)造熊杨,和有參構(gòu)造。

2.5 匿名對象

只有對象的創(chuàng)建盗舰,沒有對象的聲明晶府。就是沒有名字的對象:就是沒有一個引用持有它的地址。

//正常的對象:=左邊做對象的聲明钻趋,就是個引用川陆, =右邊在創(chuàng)建對象,創(chuàng)建完對象之后蛮位,會將對象的內(nèi)存地址給p1较沪。p1叫做引用,叫做對象失仁。

Personp1=newPerson();//引用類型

?

//匿名對象:

newPerson().eat();

"一次性的"尸曼。隨著對象的創(chuàng)建而使用一次。

三萄焦、面向?qū)ο蟮娜筇卣?/p>

3.1 封裝性

3.1.1 概念

概念:"打包"的概念控轿。保護數(shù)據(jù)安全。隱藏類的實現(xiàn)細節(jié)拂封,對外提供統(tǒng)一的操作茬射。

體現(xiàn):

? ? 1、類的封裝冒签。

? ? 2在抛、方法的封裝。

? ? 3萧恕、屬性的封裝

? ? ? ? step1:使用private修飾屬性刚梭,限于本類中使用

? ? ? ? step2:提供getter和setter方法,用于給屬性賦值和取值廊鸥。

? ? ? ? ? ? ? ? 注意點:boolean類型望浩,isXXX();

3.1.2 訪問權(quán)限修飾符

1、private:限于類的內(nèi)部能夠訪問

2惰说、默認的:啥都不寫就是默認的(缺省),限于同包下能夠訪問

3磨德、protected:受保護的,限于同包下能夠訪問,不同包需要子類中才能夠使用典挑。

4酥宴、public:公共的, 沒有限制您觉。

示例代碼:

publicclassPerson{

? ? privateStringname;

? ? privateintage;



publicvoidsetName(Stringname){//就近原則

this.name=name;

?? }

? ? publicvoideat(){

? ? ? ? System.out.println(name+"拙寡,吃東西啦。琳水。");

? ? }

}

3.1.3 this關鍵字

詞義:這個肆糕,

用法一:指代本類的對象。

可以訪問本類的屬性和方法在孝。在本類中使用的時候诚啃,this可以省略。編譯器會自動添加私沮。

但是始赎,當局部變量名和成員變量,命名沖突時仔燕,可以使用this來進行區(qū)分造垛。

用法二:指代本類的構(gòu)造方法。

this()晰搀,就表示構(gòu)造方法五辽。當前類的。

如果類中有多個構(gòu)造方法厕隧,那么靠參數(shù)來區(qū)分:this()-->無參構(gòu)造奔脐,this(參數(shù))-->有參構(gòu)造

要位于首行。

3.2 繼承性

3.2.1 概念

概念:描述兩個類的關系吁讨。一個類(子類)繼承了另一個類(父類)髓迎。

? ? 滿足 子類 is - a 父類 范式,兩個類才可以使用繼承建丧。


? ? 父類:基類排龄,超類,SuperClass

? ? 子類:派生類翎朱,SubClass

?

- 子類中可以直接訪問父類的非私有化的屬性和方法橄维。

- 子類可以新增自己的屬性和方法。

- 子類還可以重寫父類的方法拴曲。

3.2.2 作用

1争舞、降低程序的冗余,避免重復的代碼澈灼。

2竞川、子類擴展父類的功能店溢。

3、模擬現(xiàn)實世界的關系委乌。

3.2.3 關鍵字

extends:詞義床牧,擴展

classSuperClass{}

?

classSubClassextendsSuperClass{}

3.2.4 繼承的局限

Java中只支持單繼承:一個類只能有一個父類。

但是允許多層繼承:爺爺-爸爸-孫子

3.2.5 子類對象的創(chuàng)建過程

先執(zhí)行父類的構(gòu)造方法:開辟父類中屬性

再執(zhí)行子類的構(gòu)造方法:

意味著:子類的構(gòu)造方法遭贸,第一行一定是調(diào)用了父類的構(gòu)造方法戈咳。默認調(diào)用父類的無參構(gòu)造方法。如果子類的構(gòu)造方法壕吹,沒有顯示的調(diào)用父類的構(gòu)造方法著蛙, 那么由編譯器自動添加super(),表示調(diào)用父類的無參構(gòu)造算利。

3.2.6 super關鍵字

可以直接訪問父類的屬性和方法册踩。

指代父類的構(gòu)造方法泳姐。有參效拭,無參。位于首行胖秒。

注意和this關鍵字的對比缎患。

3.2.7 方法重寫:override

概念:繼承中,子類將父類已有的方法阎肝,重新實現(xiàn)挤渔。(重新提供一個方法體)

?

規(guī)則:

? ? 1、繼承結(jié)構(gòu)中

? ? 2风题、重寫方法聲明必須和父類的一致:返回值類型判导,方法名,參數(shù)列表沛硅。

? ? 3眼刃、訪問權(quán)限,不能比父類更加嚴格:private-默認的-protected-public

? ? 4摇肌、重寫方法不能拋出比父類更大的異常擂红。

3.3 多態(tài)性

3.3.1 概念

概念:事物的多種形態(tài)。

3.3.2 方法的多態(tài)

方法的多態(tài):一個方法的多種形態(tài)--->方法的重載(overload)围小。

概念:同一個功能方法昵骤,根據(jù)參數(shù)不同,執(zhí)行的具體的方法也不同肯适。

classA{

? ? publicvoidadd(inti,intj){//1


? ? }

publicvoidadd(doubled1,doubled2){//2


?? }

}

規(guī)則:

1变秦、同一個類中

2、方法名必須一致框舔。

3蹦玫、參數(shù)列表必須不同:順序,類型,個數(shù)钳垮。

對象的多態(tài):結(jié)合方法的重寫惑淳。

3.3.3 對象的多態(tài)&方法的重寫

子類對象的向上轉(zhuǎn)型和向下轉(zhuǎn)型。

父類:Animal饺窿,子類:Cat歧焦,Dog

classAniaml{

? ? Stringname;

? ? intage;

? ? publicvoideat(){}

? ? publicvoidsleep(){}

}

classCat{

? ? Stringcolor;

? ? @override

? ? publicvoideat(){


? ? }

//新增

publicvoidcatchMouse(){


?? }

}

1、向上轉(zhuǎn)型:子類對象向上轉(zhuǎn)型后肚医,會失去子類新增绢馍。可以訪問的是父類的屬性和方法肠套,以及子類重寫舰涌。

2、向下轉(zhuǎn)型:以向上轉(zhuǎn)型為前提你稚,將子類對象瓷耙,由父類類型,再轉(zhuǎn)為子類類型刁赖「橥矗可以重新獲訪問子類新增。

繼承結(jié)構(gòu)中宇弛,子類是一個特殊的父類類型鸡典。

?

父類類型,指向一個父類對象枪芒。

Animala1=newAniaml();

也可以指向一個子類對象彻况。子類對象的向上轉(zhuǎn)型。

Animala2=newCat();//向上轉(zhuǎn)型舅踪,name纽甘,age,重寫eat()硫朦,sleep()

Catc1=newCat();

?

Catc2=(Cat)a2;//向下轉(zhuǎn)型,name,age,color,重寫eat()贷腕,sleep(),catchMouse()

instanceof關鍵字:

來判斷某個引用指向的對象咬展,是否屬于某個類(包含父類)泽裳。

向下轉(zhuǎn)型前:先使用instanceof關鍵字,判斷是否是該類型破婆,否則會失斾套堋:ClassCastException


語法:

引用instanceof類名

--->boolean的結(jié)果:true,false

Animala1=newAnimal();

Catc1=newCat();

a1instanceofAnimal--->true

c1instanceofCat--->true

c1instanceofAnimal--->true

a1instanceofCat--->false

3祷舀、結(jié)合方法的重寫

總結(jié):

如果想知道一個引用瀑梗,能夠訪問哪些烹笔?看=左邊是什么類型的。

如果=左邊聲明的是父類類型抛丽,那么就調(diào)用父類中聲明谤职。

如果=左邊聲明的是子類子類,那么就調(diào)用父類中的亿鲜,以及子類新增的允蜈。

如果想知道一個引用,執(zhí)行的方法是否重載蒿柳?看=右邊真正創(chuàng)建的是哪個對象

如果=右邊創(chuàng)建的是父類對象饶套,那么調(diào)用父類中。

如果=右邊創(chuàng)建的是子類對象垒探,那么調(diào)用子類重寫的方法妓蛮。

對象多態(tài)性結(jié)合方法的重寫:如何體現(xiàn)多態(tài)的?

Animal a1 = new Aniaml();//調(diào)用父類的方法圾叼,不是子重寫的蛤克。

Animal a2 = new Cat();//調(diào)用父類中聲明的,但是是子類重寫的方法褐奥。

?

a1,a2---->Animal

? ? 根據(jù)new的對象不同咖耘,可能調(diào)用重寫的(子類對象),也可能調(diào)用不重寫(父類對象)撬码。

4、對象多態(tài)性的應用

將父類的類型作為參數(shù)版保,可以傳入任意的子類對象呜笑。傳參:向上轉(zhuǎn)型。

將父類的類型作為返回值彻犁,可以返回任意的子類對象叫胁。

publicstaticvoidtest(Animala){

?

}

?

publicAnimalgetAnimal(){

//......

returnnewCat();

}

publicstaticvoidmain(String[]args){

Animala1=newAnimal();

Catc1=newCat();

? ? test(a1);

test(c1);

}

?

?

四、static汞幢,final驼鹅、abstract關鍵字

4.1 static關鍵字

含義:"靜態(tài)的",屬于類森篷。由類直接訪問输钩。

4.1.1 靜態(tài)屬性

由static修飾的成員變量,就表示為靜態(tài)成員仲智。也叫做靜態(tài)屬性买乃。屬于類,只有一份钓辆。在內(nèi)存中另一塊空間剪验。多個對象也可以訪問肴焊,共享這一份數(shù)據(jù)。

靜態(tài)屬性功戚,隨著類的加載而產(chǎn)生娶眷。成員變量,隨著對象的創(chuàng)建而產(chǎn)生啸臀。幾個對象茂浮,就幾份獨立的成員變量的數(shù)據(jù)。

應用:類的所有的對象的某個屬性值都相同壳咕,就可以設計為static的席揽。節(jié)省內(nèi)存,操作便捷谓厘。

4.1.2 靜態(tài)方法

由static修飾的方法幌羞,就叫做靜態(tài)方法。由類直接調(diào)用竟稳。對象也可以調(diào)用属桦,但是不建議。

靜態(tài)方法:可以有靜態(tài)的屬性以及調(diào)用其他的靜態(tài)方法他爸。

靜態(tài)方法:不能直接訪問非靜態(tài)的屬性和方法聂宾,以及不能出現(xiàn)this和super關鍵字。

應用:如果一個方法中不涉及對象的內(nèi)容诊笤,就可以設計為靜態(tài)方法系谐。由類直接調(diào)用,不需要創(chuàng)建對象讨跟。比較簡潔纪他。

工具類:往往都是靜態(tài)方法,由類直接調(diào)用晾匠。

4.1.3 代碼塊{}

局部代碼塊:

也叫普通代碼塊茶袒。就是方法中的一塊代碼。if凉馆,for薪寓,while。澜共。向叉。{}

注意作用域

構(gòu)造代碼塊:

類里,方法外的代碼塊咳胃。

當創(chuàng)建對象植康,隨著構(gòu)造方法的執(zhí)行而執(zhí)行。優(yōu)先于構(gòu)造方法執(zhí)行展懈。創(chuàng)建幾個對象销睁,就執(zhí)行幾次構(gòu)造代碼塊以及構(gòu)造方法供璧。

可以統(tǒng)一初始化非靜態(tài)的屬性

靜態(tài)代碼塊:

使用static修飾的代碼塊

當程序加載的時候執(zhí)行,優(yōu)先于main執(zhí)行冻记,只執(zhí)行1次

如果有些代碼在項目啟動的時候就執(zhí)行睡毒,可以寫在static代碼塊中。

同步代碼塊:

多線程

4.2 final關鍵字

詞義:"最終的冗栗,最后的"

修飾變量——>不允許在修改值演顾。常量:所有的字母都大寫。

局部變量

成員變量

修飾方法——>不允許子類重寫

修飾類——>不允許子類繼承

4.3 abstract關鍵字

含義:"抽象的"

修飾方法:抽象方法

該方法只有方法的聲明(功能描述)隅居,沒有方法體钠至,{}也沒有,直接胎源;結(jié)束了棉钧。

目的:將功能的聲明和實現(xiàn)分離開。強制子類必須重寫

所在的類涕蚤,必須是抽象的宪卿。

修飾類:抽象類——>"做爸爸"

不能被實例化,也就是說不能創(chuàng)建對象

抽象類中可能包含有抽象方法万栅。

必須等待子類來繼承佑钾,并且實現(xiàn)所有的抽象方法。才允許創(chuàng)建子類對象

如果子類沒有實現(xiàn)全部的抽象方法烦粒,那么子類也是抽象的休溶,要再等子類繼承并實現(xiàn)抽象方法。

抽象類:作為父類撒遣。用于繼承邮偎。

抽象類:成員變量,常量义黎,靜態(tài)成員變量,成員方法豁跑,靜態(tài)方法廉涕,構(gòu)造方法,final方法艇拍,抽象方法狐蜕。。卸夕。

抽象方法所在的類层释,必須抽。

抽象類中不一定非要包含抽象方法快集。

五贡羔、接口

5.1 概念

接口就是一個協(xié)議廉白,一種規(guī)則,一個標準乖寒,一個功能聲明猴蹂。

USB,Type-C楣嘁。磅轻。。逐虚。

5.2 接口的語法

//聲明一個接口

interfaceA{

? ? //靜態(tài)常量

//抽象方法

}

?

//接口更不允許實例化聋溜,需要有實現(xiàn)類來實現(xiàn)接口中的方法。

classA1implementsA{

//此處實現(xiàn)接口A中的所有抽象方法叭爱。

}

接口中:

靜態(tài)常量:默認的修飾符撮躁,public static final

抽象方法:默認的修飾符:public abstract

5.3 接口的使用

多實現(xiàn):一個實現(xiàn)類,可以同時實現(xiàn)多個接口涤伐,就意味著同時滿足多個規(guī)則馒胆。

多繼承:一個接口可以繼承另一個接口,而且可以同時繼承多個接口凝果。

類只允許單繼承祝迂,但是接口可以多繼承。因為接口中的方法器净,都是抽象的型雳,沒有具體的實現(xiàn)。

一個類,如果沒有實現(xiàn)接口中的所有的方法恳邀, 那么該類是抽象的妻熊。

一個類,可以繼承父類的同時冤荆,實現(xiàn)其他的接口。

特殊方法:

static方法权纤,允許有方法體钓简,由接口名直接調(diào)用。

JDK1.8版汹想,新增的功能:default方法:允許方法有方法體外邓。提供基本的功能,不強制實現(xiàn)類必須實現(xiàn)古掏。

5.4 接口的作用

降低了程序耦合性:功能的聲明和功能的實現(xiàn)分離開损话。面向接口編程。

定義的都是規(guī)則槽唾,都是抽象方法丧枪。保持了接口的一致光涂。

接口可以多繼承,使用起來更靈活豪诲,彌補了java單繼承的局限性顶捷。

5.5. 接口回調(diào)

一個接口A,和它的實現(xiàn)類屎篱,在另一個類B中服赎,持有了接口A的引用,調(diào)用接口中的方法交播,就是接口回調(diào)重虑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秦士,隨后出現(xiàn)的幾起案子缺厉,更是在濱河造成了極大的恐慌,老刑警劉巖隧土,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件提针,死亡現(xiàn)場離奇詭異,居然都是意外死亡曹傀,警方通過查閱死者的電腦和手機辐脖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皆愉,“玉大人嗜价,你說我怎么就攤上這事∧宦” “怎么了久锥?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長异剥。 經(jīng)常有香客問我瑟由,道長,這世上最難降的妖魔是什么冤寿? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任错妖,我火速辦了婚禮,結(jié)果婚禮上疚沐,老公的妹妹穿的比我還像新娘。我一直安慰自己潮模,他們只是感情好亮蛔,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著擎厢,像睡著了一般究流。 火紅的嫁衣襯著肌膚如雪辣吃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天芬探,我揣著相機與錄音神得,去河邊找鬼。 笑死偷仿,一個胖子當著我的面吹牛哩簿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酝静,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼节榜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了别智?” 一聲冷哼從身側(cè)響起宗苍,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎薄榛,沒想到半個月后讳窟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡敞恋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年丽啡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耳舅。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡碌上,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浦徊,到底是詐尸還是另有隱情馏予,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布盔性,位于F島的核電站霞丧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冕香。R本人自食惡果不足惜蛹尝,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悉尾。 院中可真熱鬧突那,春花似錦、人聲如沸构眯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猫缭,卻和暖如春葱弟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猜丹。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工芝加, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人射窒。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓藏杖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親轮洋。 傳聞我的和親對象是個殘疾皇子制市,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容