第三章 面向?qū)ο缶幊?/h2>

本章教學(xué)內(nèi)容:

3.1 面向?qū)ο笏枷?/h2>

3.1.1 面向?qū)ο蠛喗?沒用)

????面向?qū)ο笫钱?dāng)前計算機界關(guān)心的重點,它是90年代以后軟件開發(fā)方法的的主流。目前面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、網(wǎng)絡(luò)管理結(jié)構(gòu)、人工智能等領(lǐng)域。

3.1.2 面向?qū)ο蠡靖拍?br>

1.對象

????在現(xiàn)實世界中,每個實體都是對象。

????面向?qū)ο蟪绦蛟O(shè)計是將人們認識世界過程中普遍采用的思維方法應(yīng)用到程序設(shè)計中。

????對象的特征分為靜態(tài)特征和動態(tài)特征兩種。靜態(tài)的特征指對象的外觀、性質(zhì)、屬性等;動態(tài)的特征指對象具有的功能、行為等。人們將對象的靜態(tài)特征抽象為屬性,用數(shù)據(jù)來描述,在 Java 語言中稱之為變量;將對象的動態(tài)特征抽象為行為,用一組代碼來表示,完成對數(shù)據(jù)的操作,在 Java語言中稱之為方法

????一個對象由一組屬性和一組對屬性進行操作的方法構(gòu)成。

2.對象的狀態(tài)和行為

????對象具有狀態(tài),一個對象用數(shù)據(jù)值來描述它的狀態(tài)。

????對象還有操作,用于改變對象的狀態(tài),操作就是對象的行為。

????對象實現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中。

3.類

????將具有相同屬性及相同行為的一組對象稱為類。廣義地講,具有共同性質(zhì)的事物的集合就稱為類。

????類是對某一類事物的描述,是抽象的、概念上的定義;對象是實際存在的該類事物的個體,因而也稱實例。圖3-1就能較明確地說明類與對象的關(guān)系。(類可以比作汽車設(shè)計圖,而實例對象是一輛輛生產(chǎn)出來的汽車)

4.類的結(jié)構(gòu)

????在客觀世界中有若干類,這些類之間有一定的結(jié)構(gòu)關(guān)系。通常有兩種主要的結(jié)構(gòu)關(guān)系,即一般--具體結(jié)構(gòu)關(guān)系,整體--部分結(jié)構(gòu)關(guān)系。

(1)一般——具體結(jié)構(gòu)稱為分類結(jié)構(gòu),也可以說是“或”關(guān)系,或者是“is a”關(guān)系。

(2)整體——部分結(jié)構(gòu)稱為組裝結(jié)構(gòu),它們之間的關(guān)系是一種“與”關(guān)系,或者是“has a”關(guān)系。

3.1.3 面向?qū)ο蟮奶卣?br>

1.封裝性

2.? 繼承性

3.多態(tài)性

????Java 語言中含有方法重載成員覆蓋兩種形式的多態(tài)。

????繼承是面向?qū)ο蠓椒ㄖ械闹匾拍睿⑶沂翘岣哕浖_發(fā)效率的重要手段。

3.2 類與對象

3.2.1 類的定義

????是Java中的一種重要的引用類型,它將多個對象所共有的屬性(對象的特征)和方法(對象數(shù)據(jù)的操作算法)封裝組合成一個單元。定義一個類,就是創(chuàng)建一種新的數(shù)據(jù)類型,本質(zhì)上是對象的結(jié)構(gòu)定義

1.Java中定義類的語法格式

[訪問符] [修飾符] class? <類名> [extends父類名] [implements接口列表]{

?[成員變量] [成員方法]

}

其中:

(1)訪問符:用于聲明類的訪問權(quán)限,具體可取public或缺省 。

(2)修飾符:用于說明所定義的類的特性??捎玫挠衋bstract,static或final等。

(3)class:是Java語言中定義類的關(guān)鍵字。

(4)類名:定義類的名字,類的命名必須符合Java標識符的命名規(guī)范。

(5)extends父類名:說明類的父類。具體用法詳見4.1小節(jié)。

(6)implements接口列表:說明一個類所實現(xiàn)的接口。

(7)成員變量:定義了該類所具有的屬性。

(8)成員方法:方法是類行為的體現(xiàn),其他對象可以根據(jù)類的方法對類進行訪問。

2.成員方法的定義

??[訪問符] 返回類型 方法名稱(參數(shù)列表){

方法體;

}

3.2.2對象的創(chuàng)建

1.創(chuàng)建對象

創(chuàng)建屬于某類的對象,需要通過下面兩個步驟來實現(xiàn):(兩步的類可以不同,但第一步的類不能是new的類的子類)

第一步:聲明該類的一個變量(引用變量),用以指向由類所創(chuàng)建的對象”。

第二步:利用 new 運算符創(chuàng)建對象(即用new運算符在內(nèi)存中為該對象分配地址空間),并把該對象的引用(即存放該對象的首地址)賦給聲明好的引用變量。

2.使用對象

????當(dāng)創(chuàng)建完一個對象后,可以使用點操作符“.”來實現(xiàn)對屬性和方法的訪問。

????訪問形式如下:

????訪問屬性:對象名.屬性名

????訪問方法:對象名.方法名()

????例如:如果想訪問Employee類中的員工姓名和員工每月的薪水屬性,可以用如下方法來訪問:

????emp1.name?? //訪問Employee類中的name屬性

????emp1.salary?? //訪問Employee類中的salary屬性

3.null關(guān)鍵字的使用

????“null”關(guān)鍵字表示“空”,用于標識一個不確定的對象,即沒有內(nèi)存地址的對象。因此可以將null賦給引用類型變量,但不可以賦給基本類型變量。

3.2.3類的構(gòu)造方法

????定義構(gòu)造方法的一般形式:

????[訪問符] 類名稱(類型 1 參數(shù) 1,類型 2 參數(shù) 2,…)

????{

????程序語句;

????…??//構(gòu)造方法沒有返回值

????}

????默認構(gòu)造方法類似于下面代碼:

????public Employee (){

?????……

????}

3.2.4 this 關(guān)鍵字

????this是Java的一個關(guān)鍵字,代表當(dāng)前類的對象,用于解決變量的命名沖突和不確定性問題。當(dāng)方法的參數(shù)或者方法中的局部變量與類的屬性同名時,類的屬性就被屏蔽,此時要訪問類的屬性就要使用“this.屬性名”的方式。

????當(dāng)然在沒有命名沖突的情況下,可以直接使用屬性名。

this關(guān)鍵字的用法如下:

(1)可以調(diào)用當(dāng)前對象的其它方法或訪問當(dāng)前對象的實例變量。

如: this.g();

(2)使用this可以區(qū)分當(dāng)前作用域中同名的不同變量。

?String? x;?? //實例變量

?public Test(String x , int a) {

?? this.x=x;?

?}

(3)在一個構(gòu)造方法中調(diào)用本類的另一個構(gòu)造方法。

?public Test( int? x) {

??? this(x,0);??

}?

3.2.5 方法重載

????在Java程序中,如果同一個類中存在兩個相同的方法,即方法名相同,參數(shù)列表(參數(shù)個數(shù)、參數(shù)類型、類型排列次序)也一樣,該類將無法編譯通過。但在Java中允許多個方法可以重名,但要保證參數(shù)列表(即參數(shù)個數(shù)、類型、順序)不同,這種特性稱為方法重載(overload)。對于重載的方法,編譯器是根據(jù)參數(shù)列表來進行方法綁定的。

方法重載需遵循如下兩條規(guī)則:

1.方法名相同。

2.參數(shù)列表不同。

3.2.6參數(shù)傳遞

????當(dāng)方法被調(diào)用時,如果方法有參數(shù),參數(shù)必須要實例化,即必須給參數(shù)變量(形參)一個具體的值(實參),這個過程稱為參數(shù)傳遞。在Java中,給方法傳遞參數(shù)的方式有兩種:

1.按值傳遞

2.引用傳遞(指針,傳地址)

3.3 包(類似文件夾,里面放著類)

????包采用分層結(jié)構(gòu),是Java語言中有效地管理類的一個機制。當(dāng)一個大型程序由數(shù)個不同的組別或人員共同開發(fā)時,用到相同的類名稱是很有可能的事,為了避免類名的沖突,Java允許使用包對類進行組織管理,將自定義的類與其它源代碼庫中的類分開,以確保類名的唯一性

????Java提供的基礎(chǔ)類庫就是使用包來管理。不同包中的類名可以相同,例如:Java類庫提供了兩個Date類,但分別屬于java.util包和java.sql包,所以能夠同時存在。

1.包的創(chuàng)建

????創(chuàng)建包就是在指定目錄路徑下創(chuàng)建一個子文件夾,這個包中所有類的字節(jié)碼文件將存放在該文件夾下。通過關(guān)鍵字“package”可以創(chuàng)建一個包。package語句作為Java源文件的第一條語句,必須放在源文件的第一行,指明該源文件定義的類所在的包。

package語句的格式:package 包名;

2.包中類的訪問

??????當(dāng)定義完一個類后,就可以在其它類中訪問該類。如果這些類在同一個包中,類之間可以直接訪問;而對于其他包中的類,有如下兩種訪問方式:

(1)使用import語句導(dǎo)入所需的類

(2)在所需的類名前直接添加完整的包名

3.JDK 中常見的包

(1) java.lang 包:此包包含一些 Java 語言的核心類,如 String、Math、Integer、System和 Thread,提供常用功能。在 java.lang 包中還有一個子包:java.lang.reflect用于實現(xiàn) java 類的反射機制。

(2) java.awt 包:此包包含構(gòu)成抽象窗口工具集(abstract window toolkits)的多個類,這些類被用來構(gòu)建和管理應(yīng)用程序的圖形用戶界面(GUI)。

(3) javax.swing 包:此包用于建立圖形用戶界面,此包中的組件相對于 java.awt包而言是輕量級組件。

(4) java.applet 包:此包包含 applet運行所需的一些類。

(5) java.net 包:此包包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類。

(6) java.io 包:此包包含能提供多種輸入/輸出功能的類。

(7) java.util 包:此包包含一些實用工具類。

3.4 訪問權(quán)限

Java為類中的成員設(shè)置了四種訪問權(quán)限,為類本身設(shè)置了兩種訪問權(quán)限。

1.類成員的訪問權(quán)限

????Java中定義了private、protected和public的訪問修飾符,同時也定義了一個默認的訪問級別,用于控制類中成員的訪問權(quán)限。

(1) public訪問修飾符

????使用public訪問修飾符,類的成員可被同一包或不同包中的所有類訪問,也就是說,public訪問修飾符可以使類的特性公用于任何類

(2) protected訪問修飾符

使用protected訪問修飾符允許類本身、同一包中的所有類和不同包中的子類訪問。

(3) 默認的訪問修飾符

如果一個類或類的成員前沒有任何訪問修飾符時,它們獲得默認的訪問權(quán)限,默認的可以被同一包中的其他類訪問。如果一個子類與其父類位于不同的包中,子類也不能訪問父類中的默認成員。

(4) private訪問修飾符

private訪問修飾符是限制性最大的一種訪問修飾符,被聲明為private的成員只能被此類中的其他成員訪問,不能在類外看到。

2.類的訪問權(quán)限

????聲明一個類,可以使用的權(quán)限修飾符只有public和默認的兩種。但是private和protected可以用于修飾內(nèi)部類。

????(1) public修飾的類是公有類,在任意地方都可見,可以被任何一個類使用。

????(2) 默認類只能在當(dāng)前包中可見, 可以被同一包中的其他類使用。

3.5 static成員

????Java的類體中可以包含兩種成員:實例成員和靜態(tài)成員。簡單來說,類是一種類型而不是具體的對象,一般在類中定義的成員是每個由此類產(chǎn)生的對象所擁有的,因此稱之為實例成員,只有創(chuàng)建了對象后,才能由對象訪問實例成員。如果需要讓類的所有對象在類的范圍內(nèi)共享某個成員,則需要用“static”關(guān)鍵字將這個成員定義成屬于類而不屬于某個對象的,這種成員稱之為靜態(tài)成員或類成員。

1.實例變量和靜態(tài)變量

?2.實例方法和靜態(tài)方法

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

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

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