【Java】面向?qū)ο笤斀?/h1>

1、面向?qū)ο?/h1>

面向?qū)ο螅∣bject Oriented)的基本思想是使用對(duì)象选泻、類页眯、繼承窝撵、封裝襟铭、多態(tài)等基本概念來進(jìn)行程序設(shè)計(jì)寒砖。從現(xiàn)實(shí)世界中客觀存在的事物(即對(duì)象)出發(fā)來構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類的自然思維方式魁兼。

2咐汞、對(duì)象

對(duì)象是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí)體儒鹿,它是構(gòu)成系統(tǒng)的一個(gè)基本單位约炎。一個(gè)對(duì)象由一組屬性和對(duì)這組屬性進(jìn)行操作的方法的這一組服務(wù)組成。

類的實(shí)例化可生成一個(gè)對(duì)象热芹,一個(gè)對(duì)象的生命周期包括三個(gè)階段:生成、使用魁衙、消除剖淀。

當(dāng)不存在對(duì)一個(gè)對(duì)象的引用時(shí)纤房,該對(duì)象成為一個(gè)無用對(duì)象捌刮。Java的垃圾收集器自動(dòng)掃描對(duì)象的動(dòng)態(tài)內(nèi)存區(qū)舒岸,把沒有引用的對(duì)象作為垃圾收集起來并釋放俄认。當(dāng)系統(tǒng)內(nèi)存用盡或調(diào)用System.gc()要求垃圾回收的時(shí)候眯杏,垃圾回收線程與系統(tǒng)同步運(yùn)行岂贩。

3河闰、類

類是具有相同屬性和方法的一組對(duì)象的集合褥紫,它為屬于該類的所有對(duì)象提供了統(tǒng)一的抽象描述髓考,其內(nèi)部包括屬性和方法兩個(gè)主要部分。在面向?qū)ο蟮木幊陶Z言中儡炼,類是一個(gè)獨(dú)立的程序單元榜贴,它應(yīng)該有一個(gè)類名并包括屬性和方法兩個(gè)主要部分唬党。

Java中的類實(shí)現(xiàn)包括兩個(gè)部分:類聲明和類體驶拱。

類聲明

[ public ][ abstract | final ] class className [extends superclassNmae] [implements interfaceNameList]{...}

其中蓝纲,修飾符public,abstract,final 說明了類的屬性,className為類名锹漱,superclassName為類的父類的名字凌蔬,interfaceNameList為類所實(shí)現(xiàn)的接口列表砂心。

類體

class className{
  //成員變量
  [ public | protected | private ] [ static ] [ final ] [ transient ] [ volatile ] type variableName;
  
  //成員方法
  [ public | protected | private ] [ static ] [ final | abstract ] [ native ] [ synchronized ] returnType methodName ([paramList]) [ throws exceptionList]{
    statements
  }
}

成員變量限定詞的含義:

  • static:靜態(tài)變量(類變量)
  • final:常量
  • transient:暫時(shí)性變量坎弯,用于對(duì)象的存檔,用于對(duì)象的串行化
  • volatile:貢獻(xiàn)變量译暂,用于并發(fā)線程的共享方法的實(shí)現(xiàn)也包括兩部分:方法聲明和方法體抠忘。

方法聲明

方法聲明中的限定詞的含義:

  • static:類方法,可通過類名直接調(diào)用
  • abstract:抽象方法外永,沒有方法體
  • final:方法不能被重寫
  • native:集成其他語言的方法
  • synchronized:控制多個(gè)并發(fā)線程的訪問

方法的聲明包括方法名崎脉、返回類型和外部參數(shù)。其中參數(shù)的類型可以是基本數(shù)據(jù)類型伯顶,也可以是引用數(shù)據(jù)類型囚灼。

對(duì)于基本數(shù)據(jù)類型來說骆膝,Java實(shí)現(xiàn)的是值得傳遞,方法接收參數(shù)的值灶体,但不能改變參數(shù)的值阅签。如果要改變參數(shù)的值,則用引用數(shù)據(jù)類型,因?yàn)橐脭?shù)據(jù)類型傳遞給方法的數(shù)據(jù)是內(nèi)存的地址,方法中對(duì)數(shù)據(jù)的操作(即改變地址)可以改變數(shù)據(jù)的值(即地址會(huì)指向不同的實(shí)例)谦趣。

方法體

方法體是對(duì)方法的實(shí)現(xiàn),它包括局部變量的聲明以及所有合法的Java指令。方法體中聲明的局部變量的作用域在該方法的內(nèi)部。若局部變量與類的成員變量同名,則類的成員變量被隱藏。

為了區(qū)別參數(shù)和類的成員變量,我們必須使用this流济。this用在一個(gè)方法中引用當(dāng)前對(duì)象糖声,它的值是調(diào)用該方法所在的對(duì)象悦施。返回值須與返回類型一致土陪,或者完全相同源哩,或者是其子類。當(dāng)返回類型是接口時(shí),返回值必須實(shí)現(xiàn)接口。

構(gòu)造方法

  • 構(gòu)造方法是一個(gè)特殊的方法夷陋。Java中的每一個(gè)類都有構(gòu)造方法,用來初始化該類的一個(gè)對(duì)象。
  • 構(gòu)造方法具有和類同樣的名稱,而且不返回任何的數(shù)據(jù)類型。
  • 重載經(jīng)常用于構(gòu)造方法。
  • 構(gòu)造方法只能由new運(yùn)算符調(diào)用。

4、面向?qū)ο蟮幕咎卣?/h1>

封裝

封裝性就是盡可能的隱藏對(duì)象內(nèi)部的細(xì)節(jié)岂昭,對(duì)外形成一道邊界记盒,只保留有限的接口和方法與外界進(jìn)行交互碾盟。封裝的原則是使對(duì)象以外的部分不能隨意的訪問和操作對(duì)象的內(nèi)部屬性估盘,從而避免了外界對(duì)對(duì)象內(nèi)部屬性的破壞。

可以通過對(duì)類的成員設(shè)置一定的訪問權(quán)限慨削,實(shí)現(xiàn)類中成員的信息隱蔽本辐。

  • private:類中限定為private的成員,只能被這個(gè)類的本身訪問地梨。如果一個(gè)類的構(gòu)造方法聲明為private扑眉,則其他類不能生成該類的一個(gè)實(shí)例腰素。

  • default:類中不加任何的訪問權(quán)限限定成員屬于缺省的(default)訪問狀態(tài)镣陕,可以被這個(gè)類的本身和同一個(gè)包里的類所訪問。

  • protected:類中限定為protected的成員,可以被這個(gè)類的本身、它的子類(包括同一個(gè)包中以及不同包中的子類)和同一個(gè)包中的所有其他的類訪問酵幕。

  • public:類中限定為public的成員扰藕,可以被所有的類訪問。

下圖“*”表示可以訪問:

private default protected public
同一類中 * * * *
同一包中 * * *
子類 * *
全局范圍 *

繼承

子類的對(duì)象擁有父類的全部屬性與方法芳撒,稱作子類對(duì)父類的繼承邓深。

  • Java中父類可以擁有多個(gè)子類,但是子類只能繼承一個(gè)父類笔刹,稱為單繼承芥备。

  • 繼承實(shí)現(xiàn)了代碼的復(fù)用。

  • Java中所有類都是通過直接或者間接地繼承了java.lang.Object類得到的徘熔。換言之Object是Java中所有類的父類或者超類门躯。

  • 子類不能繼承父類中訪問權(quán)限是private的成員變量和成員方法。

  • 子類可以重寫父類的方法酷师,以及命名與父類同名的成員變量讶凉。

Java中通過super來實(shí)現(xiàn)對(duì)父類成員的訪問,super用來引用當(dāng)前對(duì)象的父類山孔。super的使用有三種情況:

  • 訪問父類被隱藏的成員變量懂讯,如:super.variable;

  • 調(diào)用父類中被重寫的方法,如:super.Method([paramlist])台颠;褐望。

  • 調(diào)用父類的構(gòu)造方法,如:super([paramlist]);串前。

多態(tài)

對(duì)象的多態(tài)性是指在父類定義的屬性或者方法被子類繼承之后瘫里,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同行為。這使得同一個(gè)屬性或者方法在父類及其各個(gè)子類中具有不同的語義荡碾。例如:“幾何圖形”的“繪圖”方法谨读,“橢圓”和“多邊形”都是“幾何圖形”的子類,其“繪圖”的方法不一樣坛吁。

Java的多態(tài)性體現(xiàn)在兩個(gè)方面:由方法重載實(shí)現(xiàn)的靜態(tài)多態(tài)性(編譯時(shí)多態(tài))和方法重寫實(shí)現(xiàn)的動(dòng)態(tài)多態(tài)性(運(yùn)行時(shí)多態(tài))劳殖。

  • 編譯時(shí)多態(tài):在編譯階段,具體調(diào)用哪個(gè)被重載的方法拨脉,編譯器會(huì)根據(jù)參數(shù)的不同靜態(tài)(參數(shù)的類型哆姻、參數(shù)的順序、參數(shù)的個(gè)數(shù))確定其相應(yīng)的方法玫膀。(比如在構(gòu)造方法和一般方法里面)矛缨;子類重寫父類的方法。

  • 運(yùn)行時(shí)多態(tài):由于子類繼承了父類的所有的屬性(私有屬性除外),所有的子類對(duì)象可以作為父類對(duì)象使用箕昭。程序中凡是使用父類對(duì)象的地方誉简,都可以用子類對(duì)象來代替。一個(gè)對(duì)象可以通過引用子類的實(shí)例來調(diào)用子類的方法盟广。(比如Dog類和Cat類是Animal的子類闷串,我們定義一個(gè)方法void letSleep(Animal animal){animal.sleep();},然后sleep這個(gè)父類中的方法筋量,分別被子類重寫烹吵。那么我們向letSleep這個(gè)方法分別傳入dog(Dog類的實(shí)例)或者cat(Cat類的實(shí)例),那么該方法就會(huì)分別調(diào)用dog中的sleep()方法和cat中的sleep()方法)桨武。

重載 (overload)

  • 方法重載是讓類以統(tǒng)一的方式處理不同數(shù)據(jù)類型的手段肋拔。

  • 一個(gè)類中可以創(chuàng)建多個(gè)方法,它們具有相同的名字呀酸,但具有不同的參數(shù)和不同的定義凉蜂。調(diào)用方法時(shí)通過傳遞給它們的不同參數(shù)個(gè)數(shù)和參數(shù)類型來決定具體使用哪個(gè)方法。

  • 返回值類型可以相同也可以不同性誉,無法以返回值類型作為重載方法的區(qū)分標(biāo)準(zhǔn)窿吩。

重寫 (override)

  • 子類對(duì)父類的方法進(jìn)行重新編寫。如果在子類中的方法與其父類有相同的方法名错览、返回類型和參數(shù)表纫雁,我們說該方法被重寫。

  • 如需父類中原有的方法倾哺,可使用super關(guān)鍵字轧邪,該關(guān)鍵字引用了當(dāng)前類的父類。

  • 子類函數(shù)的訪問修飾權(quán)限不能低于父類的羞海。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末忌愚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子却邓,更是在濱河造成了極大的恐慌硕糊,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,185評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件申尤,死亡現(xiàn)場(chǎng)離奇詭異癌幕,居然都是意外死亡衙耕,警方通過查閱死者的電腦和手機(jī)昧穿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橙喘,“玉大人时鸵,你說我怎么就攤上這事。” “怎么了饰潜?”我有些...
    開封第一講書人閱讀 157,684評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵初坠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我彭雾,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,564評(píng)論 1 284
  • 正文 為了忘掉前任丧失,我火速辦了婚禮母截,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吴菠。我一直安慰自己者填,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評(píng)論 6 386
  • 文/花漫 我一把揭開白布做葵。 她就那樣靜靜地躺著占哟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酿矢。 梳的紋絲不亂的頭發(fā)上榨乎,一...
    開封第一講書人閱讀 49,874評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音瘫筐,去河邊找鬼谬哀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛严肪,可吹牛的內(nèi)容都是我干的史煎。 我是一名探鬼主播,決...
    沈念sama閱讀 39,025評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼驳糯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼篇梭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酝枢,我...
    開封第一講書人閱讀 37,761評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤恬偷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后帘睦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袍患,經(jīng)...
    沈念sama閱讀 44,217評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評(píng)論 2 327
  • 正文 我和宋清朗相戀三年竣付,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诡延。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,694評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡古胆,死狀恐怖肆良,靈堂內(nèi)的尸體忽然破棺而出筛璧,到底是詐尸還是另有隱情,我是刑警寧澤惹恃,帶...
    沈念sama閱讀 34,351評(píng)論 4 332
  • 正文 年R本政府宣布夭谤,位于F島的核電站,受9級(jí)特大地震影響巫糙,放射性物質(zhì)發(fā)生泄漏朗儒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評(píng)論 3 315
  • 文/蒙蒙 一参淹、第九天 我趴在偏房一處隱蔽的房頂上張望采蚀。 院中可真熱鬧,春花似錦承二、人聲如沸榆鼠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,778評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妆够。三九已至,卻和暖如春负蚊,著一層夾襖步出監(jiān)牢的瞬間神妹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,007評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工家妆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸵荠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,427評(píng)論 2 360
  • 正文 我出身青樓伤极,卻偏偏與公主長(zhǎng)得像蛹找,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哨坪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評(píng)論 2 349

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