面向?qū)ο?/h1>

一叁熔、面向?qū)ο蠛兔嫦蜻^(guò)程

  • 面向過(guò)程(POP床牧,Procedure Oriented Programming)
    強(qiáng)調(diào)的是功能行為,以函數(shù)為最小單位心软,考慮怎么做删铃。
  • 面向?qū)ο螅∣OP踏堡,Object Oriented Programming)
    將功能封裝進(jìn)對(duì)象,強(qiáng)調(diào)具備了功能的對(duì)象诫隅,以類(lèi)/對(duì)象為最小單位,考慮誰(shuí)來(lái)做挤渔。程序員從面向過(guò)程的執(zhí)行者轉(zhuǎn)化成面向?qū)ο蟮闹笓]者风题。

二沛硅、面向?qū)ο蟮娜筇卣?/h2>

1.封裝

我們程序設(shè)計(jì)追求“高內(nèi)聚,低耦合”擂红。

  • 高內(nèi)聚 :類(lèi)的內(nèi)部數(shù)據(jù)操作細(xì)節(jié)自己完成昵骤,不允許外部干涉肯适;
  • 低耦合 :僅對(duì)外暴露少量的方法用于使用。

隱藏對(duì)象內(nèi)部的復(fù)雜性蹦玫,只對(duì)外公開(kāi)簡(jiǎn)單的接口樱溉。便于外界調(diào)用纬凤,從而提高系統(tǒng)的可擴(kuò)展性、可維護(hù)性肚医。通俗的說(shuō)肠套,把該隱藏的隱藏起來(lái)猖任,該暴露的暴露出來(lái)。這就是封裝性的設(shè)計(jì)思想搁痛。

2.繼承
  • 為什么要有繼承宇弛?
    多個(gè)類(lèi)中存在相同屬性和行為時(shí),將這些內(nèi)容抽取到單獨(dú)一個(gè)類(lèi)中彻况,那么多個(gè)類(lèi)無(wú)需再定義這些屬性和行為纽甘,只要繼承那個(gè)類(lèi)即可抽碌。
    此處的多個(gè)類(lèi)稱(chēng)為子類(lèi)( 派生類(lèi)),單獨(dú)的這個(gè)類(lèi)稱(chēng)為父類(lèi)(基類(lèi)或超類(lèi))左权。
    可以理解為:“子類(lèi) is a 父類(lèi)
  • 類(lèi)繼承語(yǔ)法規(guī)則:
    class Subclass extends SuperClass{ }
  • 作用:
    繼承的出現(xiàn)減少了代碼冗余涮总,提高了代碼的復(fù)用性祷舀。
    繼承的出現(xiàn)裳扯,更有利于功能的擴(kuò)展饰豺。
    繼承的出現(xiàn)讓類(lèi)與類(lèi)之間產(chǎn)生了關(guān)系允蜈,提供了多態(tài)的前提饶套。
    注意:不要僅為了獲取其他類(lèi)中某個(gè)功能而去繼承
3.多態(tài)

多態(tài)性,是面向?qū)ο笾凶钪匾母拍睢?br> 對(duì)象的多態(tài)性:父類(lèi)的引用指向子類(lèi)的對(duì)象 怠李。可以直接應(yīng)用在抽象類(lèi)和接口上夷蚊。

  • 多態(tài)作用
    提高了代碼的通用性惕鼓,常稱(chēng)作接口重用
  • 前提
    1.需要存在繼承或者實(shí)現(xiàn)關(guān)系
    2.有方法的重寫(xiě)
  • 成員方法
    編譯時(shí):要查看引用變量所聲明的類(lèi)中是否有所調(diào)用的方法唐础。
    運(yùn)行時(shí):調(diào)用實(shí)際new的對(duì)象所屬的類(lèi)中的重寫(xiě)方法彻犁。
  • 成員變量
    不具備多態(tài)性,只看引用變量所聲明的類(lèi)驼鹅。
  • 編譯時(shí)類(lèi)型和運(yùn)行時(shí)類(lèi)型
    Java引用變量有兩個(gè)類(lèi)型: 編譯時(shí)類(lèi)型和運(yùn)行時(shí)類(lèi)型森篷。編譯時(shí)類(lèi)型由聲明該變量時(shí)使用的類(lèi)型決定,運(yùn)行時(shí)類(lèi)型由實(shí)際賦給該變量的對(duì)象決定买乃。簡(jiǎn)稱(chēng):編譯時(shí)剪验,看左邊前联;運(yùn)行時(shí),看右邊啸臀。
    若編譯時(shí)類(lèi)型和運(yùn)行時(shí)類(lèi)型不一致 烁落, 就出現(xiàn)了對(duì)象的多態(tài)性 (Polymorphism)
    多態(tài)情況下 :
    “ 看左邊 ” ,看的是父類(lèi)的引用(父類(lèi)中不具備子類(lèi)特有的方法)
    “ 看右邊 ” 灯萍,看的是子類(lèi)的對(duì)象(實(shí)際運(yùn)行的是子類(lèi)重寫(xiě)父類(lèi)的方法)

注意:一個(gè)引用類(lèi)型變量如果聲明為父類(lèi)的類(lèi)型寸谜,但實(shí)際引用的是子類(lèi)對(duì)象,那么該變量就不能再訪問(wèn)子類(lèi)中添加的屬性和方法他爸。
舉例:
Student m = new Student();
m.school = “pku”; // 合法,Student 類(lèi)有school 成員變量
Person e = new Student();
e.school = “pku”; // 非法,Person 類(lèi)沒(méi)有school 成員變量
屬性是在編譯時(shí)確定的诊笤,編譯時(shí)e 為Person 類(lèi)型,沒(méi)有school 成員變量讨跟,因而編譯錯(cuò)誤晾匠。

  • 靜態(tài)綁定和動(dòng)態(tài)綁定(早綁定和晚綁定)
    對(duì)于重載而言,在方法調(diào)用之前薪寓,編譯器就已經(jīng)確定了所要調(diào)用的方法澜共,這稱(chēng)為“早綁定”或“靜態(tài)綁定”;
    而對(duì)于多態(tài)母谎,只有等到方法調(diào)用的那一刻奇唤,解釋運(yùn)行器才會(huì)確定所要調(diào)用的具體方法匹摇,這稱(chēng)為“晚綁定”或“動(dòng)態(tài)綁定”。
    引用一句Bruce Eckel的話:“不要犯傻,如果它不是晚綁定演顾,它就不是多態(tài)「鹋埃”
    子類(lèi)中定義了與父類(lèi)同名同參數(shù)的方法棉钧,在多態(tài)情況下,將此時(shí)父類(lèi)的方法稱(chēng)為虛擬方法万栅,父類(lèi)根據(jù)賦給它的不同子類(lèi)對(duì)象西疤,動(dòng)態(tài)調(diào)用屬于子類(lèi)的該方法代赁。這樣的方法調(diào)用在編譯期是無(wú)法確定的。
    Person e = new Student();
    e.getInfo(); // 調(diào)用Student 類(lèi)的getInfo() 方法
    編譯時(shí)e 為Person 類(lèi)型徒役,而方法的調(diào)用是在運(yùn)行時(shí)確定的窖壕,所以調(diào)用的是Student類(lèi)的getInfo() 方法艇拍,此即為動(dòng)態(tài)綁定。
  • 對(duì)象類(lèi)型轉(zhuǎn)換
    1.基本數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
    自動(dòng)類(lèi)型轉(zhuǎn)換:小的數(shù)據(jù)類(lèi)型可以自動(dòng)轉(zhuǎn)換成大的數(shù)據(jù)類(lèi)型
    如long g=20; double d=12.0f
    強(qiáng)制類(lèi)型轉(zhuǎn)換:可以把大的數(shù)據(jù)類(lèi)型強(qiáng)制轉(zhuǎn)換成小的數(shù)據(jù)類(lèi)型
    如 float f=(float)12.0; int a=(int)1200L
    2.引用數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
    從子類(lèi)到父類(lèi)的類(lèi)型轉(zhuǎn)換可以自動(dòng)進(jìn)行
    從父類(lèi)到子類(lèi)的類(lèi)型轉(zhuǎn)換必須通過(guò)造型( 強(qiáng)制類(lèi)型轉(zhuǎn)換) 實(shí)現(xiàn)
    ps:
    1)對(duì)Java 對(duì)象的強(qiáng)制類(lèi)型轉(zhuǎn)換稱(chēng)為造型
    2)在造型前可以使用instanceof進(jìn)行判斷
    3)無(wú)繼承關(guān)系的引用類(lèi)型間的轉(zhuǎn)換是非法的
    對(duì)象類(lèi)型轉(zhuǎn)換.png
  • instanceof 操作符
    x instanceof A :檢驗(yàn)x 是否為類(lèi)A 的對(duì)象层释,返回值為boolean 型贡羔。
    注意:要求x所屬的類(lèi)與類(lèi)A必須是子類(lèi)和父類(lèi)的關(guān)系个初,否則編譯錯(cuò)誤。
    舉例:
    public class Person extends Object {…}
    public class Student extends Person {…}
    public class Graduate extends Person {…}
public void method(Person e) {
if (e instanceof Person)
//  處理Person 類(lèi)及其子類(lèi)對(duì)象
if (e instanceof Student)
// 處理Student 類(lèi)及其子類(lèi)對(duì)象
if (e instanceof Graduate)
// 處理Graduate 類(lèi)及其子類(lèi)對(duì)象
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末楣嘁,一起剝皮案震驚了整個(gè)濱河市珍逸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谆膳,老刑警劉巖漱病,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漓穿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)型雳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)纠俭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冤荆,“玉大人权纤,你說(shuō)我怎么就攤上這事汹想。” “怎么了损话?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵丧枪,是天一觀的道長(zhǎng)拧烦。 經(jīng)常有香客問(wèn)我钝计,道長(zhǎng),這世上最難降的妖魔是什么交播? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮缺厉,結(jié)果婚禮上隧土,老公的妹妹穿的比我還像新娘曹傀。我一直安慰自己饲宛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著家淤,像睡著了一般絮重。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上督怜,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天号杠,我揣著相機(jī)與錄音究流,去河邊找鬼动遭。 笑死厘惦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酝静。 我是一名探鬼主播羡玛,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼稼稿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了敞恋?” 一聲冷哼從身側(cè)響起硬猫,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坑雅,失蹤者是張志新(化名)和其女友劉穎盔性,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蛹尝,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡突那,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年愕难,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惫霸。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猫缭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壹店,到底是詐尸還是另有隱情猜丹,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布硅卢,位于F島的核電站射窒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏将塑。R本人自食惡果不足惜脉顿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望点寥。 院中可真熱鬧艾疟,春花似錦、人聲如沸误褪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸠天。三九已至,卻和暖如春剥纷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悠垛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工拇惋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澳眷。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像助琐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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