最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

面向?qū)ο蠡A(chǔ)

2023-02-12 00:25 作者:鹿是不是鹿  | 我要投稿

大家好, 我是鹿是不是鹿, 下面是為大家精選的一些面向?qū)ο蠡A(chǔ)知識, 希望能給大家?guī)硖嵘?/p>

1.1??面向?qū)ο?/h1>

1.1.1?????概念

所謂的面向?qū)ο笫且环N編程思想,通過這種思想可以把生活中的復雜事情變得簡單化,從原來的執(zhí)行者變成了指揮者,面向?qū)ο笫腔诿嫦蜻^程而言的。

我們經(jīng)常說的面向?qū)ο蟮木幊虒崿F(xiàn)(OOP,Object Oriented Programming)

?

l??面向過程強調(diào)的是過程,例如:

1、打開冰箱?2、把大象放進去???3、關(guān)上冰箱

l??面向?qū)ο髲娬{(diào)結(jié)果,例如:

1、?餓了,去平臺點餐,這個動作就是面向?qū)ο?。你沒有去市場買菜洗菜做飯。。。只要有app就可以了。

2、?衣服臟了,直接甩給女票去處理等著穿干凈的就可以了。你沒有關(guān)注中間的過程。。只要找好對象就可以了。

3、面試官問什么是面向?qū)ο螅磕愦鹑f物皆對象?。〔唤ㄗh因為你還沒到這個深度,最好舉例。就像是,你說空即是色色即是空—信你個鬼。

?

1.1.2?????三大特征

1、?封裝性,把相關(guān)的數(shù)據(jù)封裝成一個“類”組件

2、?繼承性,是子類自動共享父類屬性和方法,這是類之間的一種關(guān)系

3、?多態(tài),增強軟件的靈活性和重用性

1.2??類和對象

1.2.1?????類

1、?Java語言最基本單位就是類,類似于類型。

2、?類是一類事物的抽象。

3、?可以理解為模板或者設(shè)計圖紙。

1.2.2?????對象

每個對象具有三個特點:對象的狀態(tài),對象的行為和對象的標識。

1、?對象的狀態(tài)用來描述對象的基本特征。

2、?對象的行為用來描述對象的功能。

3、?對象的標識是指對象在內(nèi)存中都有一個唯一的地址用來和其他對象區(qū)分開來。

4、?類是一類事物的抽象,對象是具體的實現(xiàn)。

1.2.3?????類和對象的關(guān)系

1、?計算機語言是用來描述現(xiàn)實世界事物的。屬性+行為

2、?那怎么通過java語言描述呢?通過類來描述事物,把事物的屬性當做成員變量,把行為當做成員方法。

分析手機事物:

屬性:顏色,尺寸,品牌,價格。。。

方法:打電話,發(fā)短信,聽音樂。。。。

類:手機類,抽取相同的屬性和行為

對象:可以按照模板生產(chǎn)很多個手機,比如1號手機對象,包含特有的成員變量和成員方法

1.3??類和對象的創(chuàng)建和使用

1.3.1?????練習1:類的創(chuàng)建使用

通過class關(guān)鍵字創(chuàng)建類,通過new關(guān)鍵字創(chuàng)建對象。

1.3.2?????對象在內(nèi)存中的存儲

Java把內(nèi)存分成5大區(qū)域,我們重點關(guān)注棧和堆。

1、?一般來講局部變量存在棧中,方法執(zhí)行完畢內(nèi)存就被釋放

2、?對象(new出來的東西)存在堆中,對象不再被使用時,內(nèi)存才會被釋放

3、?每個堆內(nèi)存的元素都有地址值

4、?對象中的屬性都是有默認值的

1.3.3?????單一對象內(nèi)存圖

Person p = new Person();


1、?在棧內(nèi)存中,創(chuàng)建一個引用變量p,持有對象的地址值

2、?在堆內(nèi)存中,創(chuàng)建Person對象,并且開辟變量的空間,完成初始化

3、?給堆內(nèi)存中的元素,分配一個唯一標志,地址值。交給p去保存。

4、?p.name=”lisi”;p.age=20;就去堆內(nèi)存中找唯一的地址值,找到Person對象,并對其屬性進行修改賦值。

5、?p.eat();就去堆內(nèi)存中找唯一的地址值,找到Person對象,執(zhí)行Person對象的方法。

1.3.4?????練習2:創(chuàng)建多個類

1.3.5?????多對象內(nèi)存圖

1、?變量p和變量p1不是一片空間,p1需要開辟新的空間

2、?Person p1=new Person,這時只要有new,就會新開辟空間在堆內(nèi)存中存入對象。

1.4??封裝

1.4.1?????概述

封裝是指隱藏對象的屬性和實現(xiàn)細節(jié),僅僅對外提供公共的訪問方式。

好處:

1、?提高安全性

2、?提高重用性

案例:

1、?類

2、?方法

1.4.2?????private關(guān)鍵字

是一個權(quán)限修飾符,用于修飾成員變量和成員函數(shù),被私有化的成員只能在本類中訪問。

想要修改只能,對外提供公共的,get和set方法。

1.4.3?????練習1:封裝學生

先用不同的變量名,不要出現(xiàn)this

1.5??拓展

1.5.1?????創(chuàng)建Teacher類,并創(chuàng)建Teacher對象測試

老師事物:設(shè)置特性和功能

特征:姓名、年齡、住址

功能:講課

?

測試:

創(chuàng)建Teacher對象

調(diào)用老師的屬性和功能

修改老師的屬性

?

1.5.2?????編寫汽車類并畫內(nèi)存圖

屬性:顏色,型號,品牌,價格

行為:開,飛。。。

汽車對象的創(chuàng)建和使用

1.5.3?????創(chuàng)建對象的流程

Person p = new Person();//短短這行代碼發(fā)生了很多事情

1.??????把Person.class文件加載進內(nèi)存

2.??????在棧內(nèi)存中,開辟空間,存放變量p

3.??????在堆內(nèi)存中,開辟空間,存放Person對象

4.??????對成員變量進行默認的初始化

5.??????對成員變量進行顯示初始化

6.??????執(zhí)行構(gòu)造方法(如果有構(gòu)造代碼塊,就先執(zhí)行構(gòu)造代碼塊再執(zhí)行構(gòu)造方法)

7.??????堆內(nèi)存完成

8.??????把堆內(nèi)存的地址值賦值給變量p?,p就是一個引用變量,引用了Person對象的地址值

1.5.4?????匿名對象

沒有名字的對象,是對象的簡化表示形式。

使用場景:

1、?當被調(diào)用的對象只調(diào)用一次時(多次會創(chuàng)建多個對象浪費內(nèi)存)

Demo d = new Demo();

d.sleep();

d.game();

//這個d就是對象的名字。

也可以寫成:

new Demo().show();//創(chuàng)建了一個對象調(diào)方法

new Demo().game();//又創(chuàng)建了一個對象調(diào)方法


2.1??構(gòu)造方法

2.1.1?????概念

構(gòu)造方法是一種特殊的方法,它是一個與類同名且返回值類型為同名類類型的方法。對象的創(chuàng)建就是通過構(gòu)造方法來完成,其功能主要是完成對象的創(chuàng)建或者對象的初始化。當類實例化一個對象時會自動調(diào)用構(gòu)造方法。

構(gòu)造方法和其他方法一樣也可以重載。

2.1.2?????形式

可以無參也可以有參

修飾符??類名(【參數(shù)】){

???????代碼……

}

2.1.3?????練習1:構(gòu)造方法創(chuàng)建對象

創(chuàng)建對象時的兩種方法


2.1.4?????練習2:構(gòu)造方法賦值

2.2??構(gòu)造代碼塊和局部代碼塊

2.2.1?????構(gòu)造代碼塊

1、?在類的內(nèi)部,方法外部,的代碼塊。

2、?通常用于抽取構(gòu)造方法中的共性代碼。

3、?每次調(diào)用構(gòu)造方法前都會調(diào)用構(gòu)造代碼塊

4、?優(yōu)先于構(gòu)造方法加載

2.2.2?????局部代碼塊

1、?在方法里面的代碼塊

2、?通常用于控制變量的作用范圍,出了括號就失效

3、?變量的范圍越小越好,成員變量會有線程安全問題

4、??總結(jié):執(zhí)行順序:

構(gòu)造代碼塊是最優(yōu)先的,局部代碼塊順序執(zhí)行

2.2.3?????練習1:代碼塊加載順序

2.3??this關(guān)鍵字

2.3.1?????概念

this代表本類對象的一個引用對象。

構(gòu)造函數(shù)中,this()必須放在第一行。

2.3.2?????形式

//name=name;

//age=age;

其實是想把Student類的局部變量name的值賦值給成員變量,相當于你想操作是這樣的:

//Student.name=name;

但是你不能直接寫類名,這時候就用代表本類的對象this來完成。代碼變成了:

this.name=name;

2.3.3?????練習1:當變量名相同時

當局部變量和成員變量同名時,用于區(qū)分。

如果附近有同名變量,會遵從變量的就近原則,那么怎么調(diào)用成員變量呢?

2.3.4?????練習2:構(gòu)造方法間的調(diào)用

2.4??繼承

2.4.1?????概念

繼承是面向?qū)ο笞铒@著的一個特性。

繼承是從已有的類中派生出新的類,新的類能吸收已有類的數(shù)據(jù)屬性和行為,并能擴展新的能力。

Java繼承是使用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù),新類的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類的功能,但不能選擇性地繼承父類/超類/基類。

這種技術(shù)使得復用以前的代碼非常容易,能夠大大縮短開發(fā)周期,降低開發(fā)費用。

提高復用性:只要繼承父類,就能有一樣的功能

class A extends c{??//原來的eat()拿走了???}

class B extends c{??//原來的eat()拿走了??}

class c{

????public void eat(){

???????syso("eat");

????}

}

2.4.2?????特點

1、?使用extends關(guān)鍵字

2、?相當于子類把父類的功能復制了一份

3、?java只支持單繼承

4、?繼承可以傳遞(爺爺,兒子,孫子的關(guān)系)

5、?不能繼承父類的私有成員

6、?繼承多用于功能的修改,子類可以擁有父類的功能的同時,進行功能拓展

7、?像是is a?的關(guān)系

2.4.3?????入門案例

2.5??super關(guān)鍵字

1、?通過super關(guān)鍵字可以使用父類的內(nèi)容

2、?super代表父類的一個引用對象

3、?如果用,必須出現(xiàn)在調(diào)用位置的第一行

2.6??方法的重寫

1、?繼承后,子類就擁有了父類的功能

2、?那么在子類中,可以添加子類特有的功能也可以修改父類的原有功能

3、?子類中方法簽名與父類完全一樣(包括方法的返回值,方法名和參數(shù)列表,完全一致)時,會發(fā)生覆蓋/復寫操作,相當于修改功能

注意:

1、父類中的私有方法不能被重寫

2、子類重寫父類方法時,修飾符要大于等于父類修飾符的權(quán)限

2.7??繼承中的用法

2.7.1?????成員變量的使用

局部的,成員的,父類的。

2.7.2?????成員方法的使用

2.7.3?????構(gòu)造方法的使用

1、?子類創(chuàng)建對象時,默認會去訪問父類的無參構(gòu)造方法

2、?在構(gòu)造方法的第一行,都有一條默認的語句:super();

3、?父類沒有無參構(gòu)造時,可以用super調(diào)用父類的其他構(gòu)造

2.8??拓展

2.8.1?????this和super的區(qū)別

1、?this代表本類對象的引用,super代表父類對象的引用。

2、?this用于區(qū)分局部變量和成員變量

3、?super用于區(qū)分本類變量和父類變量

4、?this.成員變量??this.成員方法()??this(【參數(shù)】)代表調(diào)用本類內(nèi)容

5、?super.成員變量??super.成員方法()??super(【參數(shù)】),代表調(diào)用父類內(nèi)容

6、?this和super不可以同時出現(xiàn)在同一個構(gòu)造方法里,他們兩個只要出現(xiàn)都得放在第一行,同時出現(xiàn)的話,到底第一行放誰呢。。

2.8.2?????重寫與重載的區(qū)別(Overload和Override的區(qū)別)

1、重載:是指同一個類中的多個方法具有相同的名字,但這些方法具有不同的參數(shù)列表,即參數(shù)的數(shù)量或參數(shù)類型不能完全相同

2、重寫:是存在子父類之間的,子類定義的方法與父類中的方法具有相同的方法名字,相同的參數(shù)表和相同的返回類型

3、重寫是父類與子類之間多態(tài)性的一種表現(xiàn)

4、重載是一類中多態(tài)性的一種表現(xiàn)

2.8.3?????繼承的內(nèi)存結(jié)構(gòu)

3.1??static

3.1.1?????概念

1、?是java中的一個關(guān)鍵字

2、?用于修飾成員(成員變量和成員方法)

3.1.2?????特點

1、?可以修飾成員變量,成員方法

2、?隨著類的加載而加載,優(yōu)先于對象加載

3、?只加載一次,就會一直存在,不再開辟新空間

4、?全局唯一,全局共享

5、?可以直接被類名調(diào)用

6、?靜態(tài)只能調(diào)用靜態(tài),非靜態(tài)可以隨意調(diào)用

7、?static不能和this或者super共用,因為有static時可能還沒有對象

3.1.3?????練習1:入門案例

3.1.4?????靜態(tài)方法內(nèi)存圖

3.1.5?????練習2:靜態(tài)調(diào)用關(guān)系

靜態(tài)只能調(diào)用靜態(tài)(變量或者方法),非靜態(tài)可以訪問所有的不管是不是靜態(tài)

3.2??靜態(tài)代碼塊、構(gòu)造代碼塊、局部代碼塊

3.2.1?????靜態(tài)代碼塊

隨著類的加載而加載,并且只被加載一次,一般用于項目的初始化

static{…}

3.2.2?????概述

1、?靜態(tài)代碼塊:在類加載時就加載,并且只被加載一次,一般用于項目的初始化

2、?構(gòu)造代碼塊:在調(diào)用構(gòu)造方法前會自動調(diào)用,每次創(chuàng)建對象都會被調(diào)用

3、?局部代碼塊:方法里的代碼塊,方法被調(diào)用時才會執(zhí)行

4、?靜態(tài)代碼塊:static{???},位置:在類里方法外

5、?TODO創(chuàng)建測試類,類中寫好靜態(tài)代碼塊,構(gòu)造代碼塊,構(gòu)造方法,普通方法里嵌套局部代碼塊。測試他們的執(zhí)行順序。

6、?靜態(tài)?-?構(gòu)造代碼塊?-?構(gòu)造方法?-?局部

3.2.3?????測試

3.3??final

3.3.1?????概念

1、?是java提供的一個關(guān)鍵字

2、?final是最終的意思

3、?final可以修飾類,方法,成員變量

初衷是因為:java出現(xiàn)了繼承后,子類可以更改父類的功能,當父類功能不許子類改變時可以利用final關(guān)鍵字修飾父類。

3.3.2?????特點

1、?被final修飾的類,不能被繼承

2、?被final修飾的方法,不能被重寫

3、?被final修飾的變量是個常量,值不能被更改

4、?常量的定義形式:?final?數(shù)據(jù)類型 常量名?=?值

3.3.3?????入門案例

3.4??多態(tài)

3.4.1?????概念

多態(tài)指同一個實體同時具有多種形式。它是面向?qū)ο蟪绦蛟O(shè)計(OOP)的一個重要特征。

主要是指同一個對象,在不同時刻,代表的對象不一樣,指的是對象的多種形態(tài)。

好處是可以把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,統(tǒng)一調(diào)用標準。

例如:水,在不同時刻可以有多種形態(tài),包括水蒸氣,冰,水。

Java怎么體現(xiàn)多態(tài)呢?狗有兩種形態(tài):狗和小動物

class Animal

class Dog extends Animal

Dog d = new Dog();//狗是狗

Animal??a=new Dog();//狗是小動物,創(chuàng)建了狗的對象,賦值給動物對象,這就是多態(tài)

3.4.2?????特點

1、?多態(tài)的前提是繼承

2、?要有方法的重寫

3、?父類引用指向子類對象,如:Animal a = new Dog(); --?小到大,向上轉(zhuǎn)型

4、?多態(tài)中,編譯看左邊,運行看右邊

3.4.3?????入門案例

3.5??多態(tài)的好處

1、???多態(tài)可以讓我們不用關(guān)心某個對象到底是什么具體類型,就可以使用該對象的某些方法。

2、???提高了程序的擴展性和可維護性

3.6??多態(tài)的使用

3.6.1?????特點

1、成員變量:使用的是父類的

2、成員方法:由于存在重寫現(xiàn)象所以使用的是子類的

3、靜態(tài)成員:隨著對象而存在,誰調(diào)用的就返回誰的

3.6.2?????測試

3.7??拓展

3.7.1?????靜態(tài)代碼塊,構(gòu)造代碼塊,局部代碼塊

!?。?zhí)行順序:靜態(tài)代碼塊—構(gòu)造代碼塊—構(gòu)造函數(shù)

7、?靜態(tài)代碼塊:在類加載時就加載,并且只被加載一次,一般用于項目的初始化

8、?構(gòu)造代碼塊:在創(chuàng)建對象時會自動調(diào)用,每次創(chuàng)建對象都會被調(diào)用

9、?局部代碼塊:方法里的代碼塊


3.7.2?????靜態(tài)變量和實例變量的區(qū)別

在語法定義上的區(qū)別:靜態(tài)變量前要加static關(guān)鍵字,而實例變量前則不加。

在程序運行時的區(qū)別:實例變量屬于某個對象的屬性,必須創(chuàng)建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態(tài)變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實例對象,靜態(tài)變量就會被分配空間,靜態(tài)變量就可以被使用了??傊?,實例變量必須創(chuàng)建對象后才可以通過這個對象來使用,靜態(tài)變量則可以直接使用類名來引用。

?

?

3.7.3?????向上轉(zhuǎn)型和向下轉(zhuǎn)型

在JAVA中,繼承是一個重要的特征,通過extends關(guān)鍵字,子類可以復用父類的功能,如果父類不能滿足當前子類的需求,則子類可以重寫父類中的方法來加以擴展。

在應用中就存在著兩種轉(zhuǎn)型方式,分別是:向上轉(zhuǎn)型和向下轉(zhuǎn)型。

比如:父類Parent,子類Child

向上轉(zhuǎn)型:父類的引用指向子類對象Parent p=new Child();

說明:向上轉(zhuǎn)型時,子類對象當成父類對象,只能調(diào)用父類的功能,如果子類重寫了父類的方法就根據(jù)這個引用指向調(diào)用子類重寫方法。

向下轉(zhuǎn)型(較少):子類的引用的指向子類對象,過程中必須要采取到強制轉(zhuǎn)型。

Parent??p = new Child();//向上轉(zhuǎn)型,此時,p是Parent類型

Child c = (Child)p;//此時,把Parent類型的p轉(zhuǎn)成小類型Child

//其實,相當于創(chuàng)建了一個子類對象一樣,可以用父類的,也可以用自己的

說明:向下轉(zhuǎn)型時,是為了方便使用子類的特殊方法,也就是說當子類方法做了功能拓展,就可以直接使用子類功能。

3.7.4?????設(shè)計多態(tài)的程序

假設(shè)現(xiàn)在有一個汽車類,我們可以根據(jù)汽車類創(chuàng)建很多汽車對象。

1、??創(chuàng)建汽車類。提供啟動、停止、運行功能

2、??創(chuàng)建子類,繼承汽車類。覆蓋/重寫 啟動和停止功能

3、??創(chuàng)建子類對象,進行子類的功能測試

4、??創(chuàng)建多態(tài)對象,進行功能測試

4.1??異常

4.1.1?????概述

用來封裝錯誤信息的對象。

組成結(jié)構(gòu):類型,提示,行號。

4.1.2?????異常的繼承結(jié)構(gòu)

Throwable -?頂級父類

-- Error:系統(tǒng)錯誤,無法修復

-- Exception:可修復的錯誤

--RunTimeException

--ClassCastException

--ClassNotFoundException

4.1.3?????異常處理

程序中遇到了異常,通常有兩種處理方式:捕獲或者向上拋出。

當調(diào)用了一個拋出異常的方法時,調(diào)用位置可以不做處理繼續(xù)向上拋出也可以捕獲異常。

1、捕獲方式:

try{

????需要捕獲的代碼

}catch(異常類型??異常名){

????處理方案

}

2、拋出方式:

在會發(fā)生異常的方法上添加代碼:throws?異常類型

例如:??public static void main(String[] args)??throws Exception{

4.1.4?????測試

接收鍵盤輸入的兩個數(shù)字并做除法運算

4.2??訪問控制符

用來控制一個類,或者類中的成員的訪問范圍。


4.3??抽象類

4.3.1?????概念

Java中可以定義沒有方法體的方法,該方法由其子類來具體的實現(xiàn)。該沒有方法體的方法我們稱之為抽象方法,含有抽象方法的類我們稱之為抽象類。

抽象類可以理解為是一個只有方法聲明沒有方法體的特殊類。

舉例:水果,東西。。

修飾符?abstract?返回值 方法名(參數(shù)列表);

?

class A{

???????public void eat(){//聲明一樣,可以提取

??????????????syso("eat...B")????}

}

class B{

???????public void eat(){//聲明一樣,可以提取

???????syso("eat。。。A")???}

}????????????

abstract class C{

??????????????public?abstract?void eat();

}

4.3.2?????特點

1、??通過java關(guān)鍵字abstract實現(xiàn)

2、??可以修飾方法或者類

3、??抽象類中可以沒有抽象方法(由子類去實現(xiàn))

4、??如果類中有抽象方法,那該類必須定義為一個抽象類

5、??子類繼承了抽象類以后,要么還是一個抽象類,要么就把所有抽象方法都重寫

6、??多用于多態(tài)中

7、??抽象類不可以被實例化

?

4.3.3?????入門案例


4.4??抽象類的用法

4.4.1?????構(gòu)造函數(shù)

抽象類也有構(gòu)造方法,但是不能本身實例化。

那抽象類的構(gòu)造函數(shù)有啥用?一般用于給子類實例化。

4.4.2?????抽象類的成員變量

既可以有變量,也可以有常量。


4.4.3?????抽象類的成員方法

抽象類里,既可以有普通方法,有可以有抽象方法。


4.5??分析老師示例

具體事物:張老師,? ?李老師

共性:備課,講課


5.1??????接口

5.1.1?概念

Java里面由于不允許多重繼承,所以如果要實現(xiàn)多個類的功能,則可以通過實現(xiàn)多個接口來實現(xiàn)。

Java接口和Java抽象類代表的就是抽象類型,就是我們需要提出的抽象層的具體表現(xiàn)。OOP面向?qū)ο蟮木幊?,如果要提高程序的復用率,增加程序的可維護性,可擴展性,就必須是面向接口的編程,面向抽象的編程,正確地使用接口、抽象類這些太有用的抽象類型做為java結(jié)構(gòu)層次上的頂層。

interface?接口名{??代碼…??}

5.1.2?????特點

1、?接口中都是抽象方法

2、?通過interface關(guān)鍵字創(chuàng)建接口

3、?通過implements讓子類來實現(xiàn)

4、?可以理解成,接口是一個特殊的抽象類

5、?接口突破了java的單繼承的局限性

6、?接口和類之間可以多實現(xiàn),接口和接口之間可以多繼承

7、?接口是對外暴露的規(guī)則,是一套開發(fā)規(guī)范

8、?接口提高了程序的功能擴展,降低了耦合性

?

5.1.3?????入門案例

5.2??接口的用法

5.2.1?????構(gòu)造方法

接口里是沒有構(gòu)造方法的。

在創(chuàng)建實現(xiàn)類的對象時默認的super(),是調(diào)用的默認Object的無參構(gòu)造。

interface?Fu{//定義一個接口

???????public?abstract?void?show();

???????//Interfaces cannot have constructors

???????/*public?Fu(){

??????????????System.out.println("Fu.Fu()");

???????}*/

}

5.2.2?????成員變量

接口里沒有成員變量,都是常量。所以,你定義一個變量沒有寫修飾符時,默認會加上:

public static final

5.2.3?????接口的成員方法

接口里的方法,默認就都是抽象的,如果你不寫明是abstract的,那會自動補齊。

例如:public?abstract?void save

5.3??????接口的復雜用法

Java中單繼承的局限性通過接口可以解決。

接口可以多繼承也可以多實現(xiàn),甚至可以繼承的同時多實現(xiàn)。

5.4??總結(jié)

1、類和類的關(guān)系:繼承?extends /?單繼承?/?單根繼承

????--?繼承的意義:為了提高代碼的復用性,減少了代碼的編寫提高開發(fā)效率。

????--?方法重寫的意義:在不修改父類源碼的前提下,在子類中重寫業(yè)務,從此使用的就是重寫后的功能。

???????--?要求子類的方法聲明和父類一樣,只要改方法體。

????--?有了繼承有了重寫就產(chǎn)生了多態(tài),多態(tài)的意義:為了統(tǒng)一程序的調(diào)用標準,標準就是父類。

????--?多態(tài)?也就是向上轉(zhuǎn)型/向上造型。

????--?向下造型的意義:很少用,相當于想要使用子類的特殊功能,還不如直接創(chuàng)建子類對象簡單。

????-- class A extends B

????--?其中,A和B都是類,A是子類,B是父類,A就擁有了B的所有功能(除了私有的和構(gòu)造方法)

?

????--?其他知識點:this?和super??,構(gòu)造方法,各種代碼塊...

?

2、類和接口關(guān)系:實現(xiàn)implements??/?單實現(xiàn)?/?多實現(xiàn)

????-- class A implements B,C

????--?其中,A是實現(xiàn)類,B和C是接口

????--?要求A?可以把?B?和C?接口里的所有?抽象方法?都重寫掉,否則?A?就是抽象類

????--?接口不能創(chuàng)建對象

????--?接口里沒有構(gòu)造方法,接口里都是常量,接口里都是抽象方法

?

3、接口和接口關(guān)系:繼承extends /?單繼承?/?多繼承

????--?接口的多繼承的關(guān)系,打破了java單繼承的局限性

????-- interface A??extends??B,C

????--?其中,A B C?都是接口,A是子接口,同時擁有B和C接口里的所有功能

????-- class AImpl implements??A

????--?要求AImpl需要重寫A接口里的所有方法(是包含B和C接口的所有方法),否則就是抽象類

?

4、接口和抽象類的區(qū)別?。。?/p>

????--?相同點:都是抽象層,都不能實例化??????????????????????

????--?不同點:

???????-- 1、抽象類用abstract關(guān)鍵字描述,接口用interface

???????-- 2、子類和抽象類之間是extends關(guān)系,實現(xiàn)類和接口之間是implements關(guān)系

???????-- 3、抽象類中?可以??有構(gòu)造方法?,接口里?不能?出現(xiàn)?構(gòu)造方法

???????-- 4、抽象類里可以有?變量,接口里沒有變量全都是靜態(tài)的常量

???????-- 5、接口里定義常量的語法:public static final String NAME="jack",會為變量自動拼接public static final

???????-- 6、抽象類里?可以有普通方法??也可以有?抽象方法,接口都是抽象方法

???????-- 7、抽象類和子類之間是繼承關(guān)系,而且java中,只支持單繼承

???????-- 8、接口突破了java單繼承的局限性,因為接口可以多繼承也可以多實現(xiàn),甚至可以繼承的同時多實現(xiàn)

???????-- 9、接口的復雜用法

???????????--?多繼承:?interface A??extends??B,C??其中A是子接口,同時擁有自己的和BC的功能

???????????--?多實現(xiàn):?class AImpl implements M,N,O,P?其中AImpl是實現(xiàn)類,需要同時重寫MNOP的所有抽象方法,否則就是一個抽象類

???????????--?繼承的同時多實現(xiàn):?class AImpl extends Object implements M,N?一定是先繼承后實現(xiàn)

5.5??設(shè)計模式

Java中有23?種設(shè)計模式,本質(zhì)是面向?qū)ο笤O(shè)計原則的實際運用,是對類的封裝性、繼承性和多態(tài)性,以及類的關(guān)聯(lián)關(guān)系和組合關(guān)系的充分理解。

當然,軟件設(shè)計模式只是一個引導,在實際的軟件開發(fā)中,必須根據(jù)具體的需求來選擇。

1、?對于簡單的程序,可能寫一個簡單的算法要比引入某種設(shè)計模式更加容易。

2、?但是對于大型項目開發(fā)或者框架設(shè)計,用設(shè)計模式來組織代碼顯然更好。

5.5.1?????單例設(shè)計模式概念

單例模式可以說是大多數(shù)開發(fā)人員在實際中使用最多的,常見的Spring默認創(chuàng)建的bean就是單例模式的。

單例模式有很多好處,比如可節(jié)約系統(tǒng)內(nèi)存空間,控制資源的使用。

其中單例模式最重要的是確保對象只有一個。

簡單來說,保證一個類在內(nèi)存中的對象就一個。

RunTime就是典型的單例設(shè)計,我們通過對RunTime類的分析,一窺究竟。

5.5.2?????源碼剖析

5.5.3?????餓漢式

目的:控制外界創(chuàng)建對象的個數(shù)只能創(chuàng)建1個對象

開發(fā)步驟:

1、?私有化構(gòu)造方法

2、?在類的內(nèi)部創(chuàng)建好對象

3、?對外界提供一個公共的get(),返回一個已經(jīng)準備好的對象

5.5.4?????懶漢式

5.6??拓展

5.6.1?????abstract注意事項

抽象方法要求子類繼承后必須重寫。那么,abstract關(guān)鍵字不可以和哪些關(guān)鍵字一起使用呢?以下關(guān)鍵字,在抽象類中。用是可以用的,只是沒有意義了。

1、?private:被私有化后,子類無法重寫,與abstract相違背。

2、?static:靜態(tài)的,優(yōu)先于對象存在。抽象方法需要子類重寫,而靜態(tài)的方法是無法被重寫的,因此二者是矛盾的。

3、?final:被final修飾后,無法重寫,與abstract相違背。

?

5.6.2?????接口和抽象類的區(qū)別

1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對象。

2、抽象類要被子類繼承,接口要被類實現(xiàn)。

3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現(xiàn)

4、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類中的變量是普通變量。

5、抽象類里的抽象方法必須全部被子類所實現(xiàn),如果子類不能全部實現(xiàn)父類抽象方法,那么該子類只能是抽象類。同樣,一個實現(xiàn)接口的時候,如不能全部實現(xiàn)接口方法,那么該類也只能為抽象類。

6、抽象方法只能申明,不能實現(xiàn),接口是設(shè)計的結(jié)果 ,抽象類是重構(gòu)的結(jié)果

7、抽象類里可以沒有抽象方法,如果要擴展抽象類的新方法,子類將很容易的就能得到這些新方法。

8、如果一個類里有抽象方法,那么這個類只能是抽象類

9、抽象方法要被實現(xiàn),所以不能是靜態(tài)的,也不能是私有的。

10、接口可繼承接口,并可多繼承接口,但類只能單根繼承。


5.6.3? ? ?了解軟件設(shè)計的開閉原則OCP

開放功能擴展,關(guān)閉源碼修改。等

開閉原則的英文全稱是Open Close Principle,縮寫是OCP,它是Java世界里最基礎(chǔ)的設(shè)計原則,它指導我們?nèi)绾谓⒁粋€穩(wěn)定的、靈活的系統(tǒng)。

開閉原則的定義是:軟件中的對象(類、模塊、函數(shù)等)應該對于擴展是開放的,但是對于修改是封閉的。

開閉原則,是一種設(shè)計模式,隨著面向?qū)ο蟪绦蛟O(shè)計的思想,應運而生。

開,指的是可以在源代碼的基礎(chǔ)上進行擴展,比如繼承,接口,抽象類等。在JAVA中,之所以用繼承,是在可以直接調(diào)用類庫的前提下,對其功能進行擴展。不需要應用者去了解封裝類的內(nèi)部邏輯就可以做開發(fā)。

閉:指不允許對原有的代碼進行修改。以免影響其他現(xiàn)有功能,造成功能癱瘓。


面向?qū)ο蠡A(chǔ)的評論 (共 條)

分享到微博請遵守國家法律
阜宁县| 固始县| 吉林市| 崇左市| 高陵县| 门头沟区| 古交市| 山西省| 循化| 广灵县| 古丈县| 镇坪县| 赤水市| 太仆寺旗| 周宁县| 故城县| 永靖县| 察哈| 桂平市| 舒城县| 平远县| 双鸭山市| 东乡县| 敦化市| 米林县| 龙泉市| 瑞昌市| 忻城县| 临安市| 泽普县| 东乡族自治县| 乳山市| 台州市| 皮山县| 齐齐哈尔市| 阿拉善盟| 南木林县| 大同市| 桐庐县| 沾化县| 吉林省|