Java面向?qū)ο蟾攀黾叭筇卣鳎ǚ庋b琼开,繼承和多態(tài))

一易结、面向?qū)ο笏枷?/b>

Java是面向?qū)ο蟮母呒?jí)語言,對于Java語言來說柜候,萬事萬物皆對象搞动!

它的基本思想是使用類,對象渣刷,繼承鹦肿,封裝,消息等基本概念進(jìn)行程序設(shè)計(jì)辅柴。面向?qū)ο蟪绦虻淖钚卧穷惵崂#惔砹丝陀^世界中具有某一特征的一類事物,封裝了這類事物所具有的屬性和行為碌嘀。

所以涣旨,類定義=成員變量(屬性)+方法(行為)。

面向?qū)ο蟪绦蛟O(shè)計(jì)與人類的思維習(xí)慣一致股冗,比如希望完成“兔子吃草"

這件事:

在面向過程的程序設(shè)計(jì)里开泽,一切以函數(shù)為中心,則會(huì)用如下語句來表達(dá):

吃(兔子魁瞪,草)穆律;

而在面向?qū)ο蟪绦蛟O(shè)計(jì)里,一切以對象為中心导俘,則會(huì)用如下語句來表達(dá):

兔子.吃(草)峦耘;

對比這兩條語句可以看出,面向?qū)ο笳Z句更接近自然語言語法旅薄,主謂賓一目了然辅髓。

二、類與對象的關(guān)系

  類是對象的抽象少梁,對象則是類的實(shí)例洛口,一個(gè)類可以生成多個(gè)對象。對一個(gè)類定義而言凯沪,包含三種最常見的成員:構(gòu)造器第焰、成員變量和方法,而構(gòu)造器是一個(gè)類創(chuàng)建對象的根本途徑妨马,如果一個(gè)類沒有構(gòu)造器則無法創(chuàng)建實(shí)例挺举。因此杀赢,如果程序員沒有為一個(gè)類創(chuàng)建構(gòu)造器,則系統(tǒng)會(huì)為該類提供一個(gè)默認(rèn)無參的構(gòu)造器湘纵。下面定義一個(gè)簡單的Person類:

public class Person{

? ? //定義兩個(gè)成員變量:姓名和年齡

? ? public String name;

? ? public int age;

? ? //定義一個(gè)say方法

? ? public void say(String content){

? ? ? ? System.out.println(content);

? ? }

}

  定義類之后就可以通過Person p = new Person()來創(chuàng)建對象了脂崔,Person對象賦給了p變量,它們在內(nèi)存中的存儲(chǔ)示意圖如下:

三梧喷、面向?qū)ο蟮娜齻€(gè)基本特征(封裝砌左,繼承和多態(tài))

1、封裝

?封裝是指將對象的實(shí)現(xiàn)細(xì)節(jié)隱藏起來铺敌,對外提供公共訪問方法汇歹,將對象的功能暴露出來。

封裝可以被認(rèn)為是一個(gè)保護(hù)屏障适刀,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機(jī)訪問秤朗。

適當(dāng)?shù)姆庋b可以讓程式碼更容易理解與維護(hù)煤蹭,也加強(qiáng)了程序代碼的安全性笔喉。最終目的是實(shí)現(xiàn)模塊設(shè)計(jì)的”高內(nèi)聚低耦合“。

那么硝皂,如何實(shí)現(xiàn)java的封裝呢常挚?首先來看一下java的訪問控制級(jí)別:

Java提供了4個(gè)訪問控制級(jí)別,由小到大如下圖:

從上圖可以得出稽物,實(shí)現(xiàn)一個(gè)類封裝的步驟如下:

??修改屬性的可見性(訪問級(jí)別)來限制對屬性的訪問(一般限制為private)奄毡,例如:

/**

這段代碼中,將 name 和 age 屬性設(shè)置為私有的贝或,只能本類才能訪問吼过,其他類都訪問不了,如此就對信息進(jìn)行了隱藏咪奖。

*/

public class Person {

? ? private String name;//姓名

? ? private int age;//年齡

}

?  ?? 對每個(gè)值屬性提供對外的公共方法訪問盗忱,也就是創(chuàng)建一對賦值取值的方法,用于對私有屬性的訪問羊赵,例如:

public class Person{

? ? private String name;

? ? private int age;

?

? ? public int getAge(){

? ? ? return age;

? ? }

?

? ? public String getName(){

? ? ? return name;

? ? }

?

? ? public void setAge(int age){

? ? ? this.age = age;

? ? }

?

? ? public void setName(String name){

? ? ? this.name = name;

? ? }

}

  采用?this?關(guān)鍵字是為了解決實(shí)例變量(private String name)和局部變量(setName(String name)中的name變量)之間發(fā)生的同名的沖突趟佃,this指當(dāng)前對象。

因此昧捷,一個(gè)類定義時(shí)闲昭,一般用private修飾成員變量,public修飾成員方法靡挥。獲取成員變量應(yīng)該用對象.get變量名()而不是對象.成員變量名序矩。

2、繼承

  我們生活中有很多繼承的例子:如兔子屬于動(dòng)物的一種跋破,兔子有一般動(dòng)物的特征及行為贮泞,在java語言里可以說兔子繼承動(dòng)物楞慈,兔子是子類,動(dòng)物是父類啃擦;學(xué)生和老師都屬于人類囊蓝,有人的一般特性,所以在java語言里可以說學(xué)生和老師繼承人類令蛉。所以繼承需要符合的關(guān)系是:is-a聚霜,父類更通用,子類更具體珠叔。

?繼承是指子類可以復(fù)用父類的屬性和方法蝎宇,Java的繼承是單繼承,每個(gè)子類只有一個(gè)直接父類祷安。Java的繼承通過extends關(guān)鍵字實(shí)現(xiàn)姥芥,實(shí)現(xiàn)繼承的類稱為子類,被繼承的類稱為父類(基類或超類)汇鞭。Java繼承語法格式如下:

修飾符 class SubClass extends SuperClass{

? //類定義部分? ? ?

}

  需要注意的是 Java 不支持多繼承凉唐,但支持多重繼承絮吵。

  子類包含與父類同名方法的現(xiàn)象稱為方法重寫癞己,也稱為方法覆蓋。

  方法的重寫要遵循“兩大兩小一大”規(guī)則譬重,“兩同”即方法名相同读整、形參列表相同簿训;“兩小”指子類方法返回值類型應(yīng)該比父類方法返回值類型要小或相等,子類方法聲明拋出的異常應(yīng)該比父類方法聲明拋出的異常類要小或相等米间;“一大”指子類方法的訪問權(quán)限應(yīng)比父類方法的訪問權(quán)限更大或相等强品。

3、多態(tài)

  多態(tài)是指子類對象可以直接賦給父類變量(父類引用指向子類對象)屈糊,但運(yùn)行時(shí)依然表現(xiàn)出子類的行為特征的榛,也就是說,同一類型的對象在執(zhí)行同一個(gè)方法時(shí)另玖,可能表現(xiàn)出多種行為特征困曙。

 ? 多態(tài)存在的三個(gè)必要條件

繼承

重寫

父類引用指向子類對象

  比如:Parent?p?=?new?Child();

  當(dāng)使用多態(tài)方式調(diào)用方法時(shí),首先檢查父類中是否有該方法谦去,如果沒有慷丽,則編譯錯(cuò)誤;如果有鳄哭,再去調(diào)用子類的同名方法要糊。

  多態(tài)的好處:可以使程序有良好的擴(kuò)展,并可以對所有類的對象進(jìn)行通用處理妆丘。

????????在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流圈:830478757 ?幫助突破瓶頸 提升思維能力

  下面舉一個(gè)多態(tài)的例子:

public class Test {

? ? public static void main(String[] args) {

? ? ? show(new Cat());? // 以 Cat 對象調(diào)用 show 方法

? ? ? show(new Dog());? // 以 Dog 對象調(diào)用 show 方法


? ? ? Animal a = new Cat();? // 向上轉(zhuǎn)型?

? ? ? a.eat();? ? ? ? ? ? ? // 調(diào)用的是 Cat 的 eat

? ? ? Cat c = (Cat)a;? ? ? ? // 向下轉(zhuǎn)型?

? ? ? c.work();? ? ? ? // 調(diào)用的是 Cat 的 work

? }?


? ? public static void show(Animal a)? {

? ? ? a.eat();?

? ? ? ? // 類型判斷

? ? ? ? if (a instanceof Cat)? {? // 貓做的事情

? ? ? ? ? ? Cat c = (Cat)a;?

? ? ? ? ? ? c.work();?

? ? ? ? } else if (a instanceof Dog) { // 狗做的事情

? ? ? ? ? ? Dog c = (Dog)a;?

? ? ? ? ? ? c.work();?

? ? ? ? }?

? ? }?

}

abstract class Animal {?

? ? abstract void eat();?

}?


class Cat extends Animal {?

? ? public void eat() {?

? ? ? ? System.out.println("吃魚");?

? ? }?

? ? public void work() {?

? ? ? ? System.out.println("抓老鼠");?

? ? }?

}?


class Dog extends Animal {?

? ? public void eat() {?

? ? ? ? System.out.println("吃骨頭");?

? ? }?

? ? public void work() {?

? ? ? ? System.out.println("看家");?

? ? }?

}




執(zhí)行以上程序锄俄,輸出結(jié)果為:

吃魚

抓老鼠

吃骨頭

看家

吃魚

抓老鼠

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末局劲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奶赠,更是在濱河造成了極大的恐慌鱼填,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅戈,死亡現(xiàn)場離奇詭異苹丸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)苇经,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門赘理,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扇单,你說我怎么就攤上這事商模。” “怎么了蜘澜?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵施流,是天一觀的道長。 經(jīng)常有香客問我兼都,道長嫂沉,這世上最難降的妖魔是什么稽寒? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任扮碧,我火速辦了婚禮,結(jié)果婚禮上杏糙,老公的妹妹穿的比我還像新娘慎王。我一直安慰自己,他們只是感情好宏侍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布赖淤。 她就那樣靜靜地躺著,像睡著了一般谅河。 火紅的嫁衣襯著肌膚如雪咱旱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天绷耍,我揣著相機(jī)與錄音吐限,去河邊找鬼。 笑死褂始,一個(gè)胖子當(dāng)著我的面吹牛诸典,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播崎苗,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼狐粱,長吁一口氣:“原來是場噩夢啊……” “哼舀寓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肌蜻,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤互墓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蒋搜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轰豆,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年齿诞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酸休。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祷杈,死狀恐怖斑司,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情但汞,我是刑警寧澤宿刮,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站私蕾,受9級(jí)特大地震影響僵缺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踩叭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一磕潮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧容贝,春花似錦自脯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至满力,卻和暖如春焕参,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背油额。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工叠纷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悔耘。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓讲岁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子缓艳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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