Java編程學(xué)習(xí):繼承的概念及方法

Java是一種可以撰寫(xiě)跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言码荔。Java 技術(shù)具有卓越的通用性瞎颗、高效性典徊、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC纽哥、數(shù)據(jù)中心、游戲控制臺(tái)栖秕、科學(xué)超級(jí)計(jì)算機(jī)春塌、移動(dòng)電話(huà)和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi)發(fā)者專(zhuān)業(yè)社群簇捍。

給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫(kù)-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

繼承的概念

繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石只壳,因?yàn)樗试S創(chuàng)建分等級(jí)層次的類(lèi)。

繼承就是子類(lèi)繼承父類(lèi)的特征和行為暑塑,使得子類(lèi)對(duì)象(實(shí)例)具有父類(lèi)的實(shí)例域和方法吼句,或子類(lèi)從父類(lèi)繼承方法,使得子類(lèi)具有父類(lèi)相同的行為事格。

生活中的繼承:

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 七六零惕艳,二五零,五四一 】驹愚,無(wú)論你是大牛還是小白远搪,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具逢捺,很多干貨和技術(shù)資料分享谁鳍!

兔子和羊?qū)儆谑巢輨?dòng)物類(lèi),獅子和豹屬于食肉動(dòng)物類(lèi)。

食草動(dòng)物和食肉動(dòng)物又是屬于動(dòng)物類(lèi)倘潜。

所以繼承需要符合的關(guān)系是:is-a余佛,父類(lèi)更通用,子類(lèi)更具體窍荧。

雖然食草動(dòng)物和食肉動(dòng)物都是屬于動(dòng)物辉巡,但是兩者的屬性和行為上有差別,所以子類(lèi)會(huì)具有父類(lèi)的一般特性也會(huì)具有自身的特性蕊退。

類(lèi)的繼承格式

在 Java 中通過(guò) extends 關(guān)鍵字可以申明一個(gè)類(lèi)是從另外一個(gè)類(lèi)繼承而來(lái)的郊楣,一般形式如下:

類(lèi)的繼承格式

class 父類(lèi) {}class 子類(lèi) extends 父類(lèi) {}

為什么需要繼承

接下來(lái)我們通過(guò)實(shí)例來(lái)說(shuō)明這個(gè)需求。

開(kāi)發(fā)動(dòng)物類(lèi)瓤荔,其中動(dòng)物分別為企鵝以及老鼠净蚤,要求如下:

企鵝:屬性(姓名,id)输硝,方法(吃今瀑,睡,自我介紹)

老鼠:屬性(姓名点把,id)橘荠,方法(吃,睡郎逃,自我介紹)

企鵝類(lèi):

老鼠類(lèi):

從這兩段代碼可以看出來(lái)哥童,代碼存在重復(fù)了,導(dǎo)致后果就是代碼量大且臃腫褒翰,而且維護(hù)性不高(維護(hù)性主要是后期需要修改的時(shí)候贮懈,就需要修改很多的代碼,容易出錯(cuò))优训,所以要從根本上解決這兩段代碼的問(wèn)題朵你,就需要繼承,將兩段代碼中相同的部分提取出來(lái)組成 一個(gè)父類(lèi):

公共父類(lèi):

這個(gè)Animal類(lèi)就可以作為一個(gè)父類(lèi)揣非,然后企鵝類(lèi)和老鼠類(lèi)繼承這個(gè)類(lèi)之后抡医,就具有父類(lèi)當(dāng)中的屬性和方法,子類(lèi)就不會(huì)存在重復(fù)的代碼妆兑,維護(hù)性也提高魂拦,代碼也更加簡(jiǎn)潔毛仪,提高代碼的復(fù)用性(復(fù)用性主要是可以多次使用搁嗓,不用再多次寫(xiě)同樣的代碼)繼承之后的代碼:

企鵝類(lèi):

老鼠類(lèi):

繼承的特性

子類(lèi)擁有父類(lèi)非private的屬性,方法箱靴。

子類(lèi)可以擁有自己的屬性和方法腺逛,即子類(lèi)可以對(duì)父類(lèi)進(jìn)行擴(kuò)展。

子類(lèi)可以用自己的方式實(shí)現(xiàn)父類(lèi)的方法衡怀。

Java的繼承是單繼承棍矛,但是可以多重繼承安疗,單繼承就是一個(gè)子類(lèi)只能繼承一個(gè)父類(lèi),多重繼承就是够委,例如A類(lèi)繼承B類(lèi)荐类,B類(lèi)繼承C類(lèi),所以按照關(guān)系就是C類(lèi)是B類(lèi)的父類(lèi)茁帽,B類(lèi)是A類(lèi)的父類(lèi)玉罐,這是java繼承區(qū)別于C++繼承的一個(gè)特性。

提高了類(lèi)之間的耦合性(繼承的缺點(diǎn)潘拨,耦合度高就會(huì)造成代碼之間的聯(lián)系)吊输。

繼承關(guān)鍵字

繼承可以使用 extends 和 implements 這兩個(gè)關(guān)鍵字來(lái)實(shí)現(xiàn)繼承,而且所有的類(lèi)都是繼承于 java.lang.Object铁追,當(dāng)一個(gè)類(lèi)沒(méi)有繼承的兩個(gè)關(guān)鍵字季蚂,則默認(rèn)繼承object(這個(gè)類(lèi)在 java.lang 包中,所以不需要 import)祖先類(lèi)琅束。

extends關(guān)鍵字

在 Java 中扭屁,類(lèi)的繼承是單一繼承,也就是說(shuō)涩禀,一個(gè)子類(lèi)只能擁有一個(gè)父類(lèi)疯搅,所以 extends 只能繼承一個(gè)類(lèi)。

extends 關(guān)鍵字

implements關(guān)鍵字

使用 implements 關(guān)鍵字可以變相的使java具有多繼承的特性埋泵,使用范圍為類(lèi)繼承接口的情況幔欧,可以同時(shí)繼承多個(gè)接口(接口跟接口之間采用逗號(hào)分隔)。

super 與 this 關(guān)鍵字

super關(guān)鍵字:我們可以通過(guò)super關(guān)鍵字來(lái)實(shí)現(xiàn)對(duì)父類(lèi)成員的訪問(wèn)丽声,用來(lái)引用當(dāng)前對(duì)象的父類(lèi)礁蔗。

this關(guān)鍵字:指向自己的引用。

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 七六零雁社,二五零浴井,五四一 】,無(wú)論你是大牛還是小白霉撵,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)磺浙!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享徒坡!

輸出結(jié)果為:

super.i = 50, this.i = 100

final關(guān)鍵字

final 關(guān)鍵字聲明類(lèi)可以把類(lèi)定義為不能繼承的撕氧,即最終類(lèi);或者用于修飾方法喇完,該方法不能被子類(lèi)重寫(xiě):

聲明類(lèi):

final class 類(lèi)名 {//類(lèi)體}

聲明方法:

修飾符(public/private/default/protected) final 返回值類(lèi)型 方法名(){//方法體}

注:實(shí)例變量也可以被定義為 final伦泥,被定義為 final 的變量不能被修改。被聲明為 final 類(lèi)的方法自動(dòng)地聲明為 final,但是實(shí)例變量并不是 final

構(gòu)造器

子類(lèi)不能繼承父類(lèi)的構(gòu)造器(構(gòu)造方法或者構(gòu)造函數(shù))不脯,但是父類(lèi)的構(gòu)造器帶有參數(shù)的府怯,則必須在子類(lèi)的構(gòu)造器中顯式地通過(guò)super關(guān)鍵字調(diào)用父類(lèi)的構(gòu)造器并配以適當(dāng)?shù)膮?shù)列表。

如果父類(lèi)有無(wú)參構(gòu)造器防楷,則在子類(lèi)的構(gòu)造器中用super調(diào)用父類(lèi)構(gòu)造器不是必須的牺丙,如果沒(méi)有使用super關(guān)鍵字,系統(tǒng)會(huì)自動(dòng)調(diào)用父類(lèi)的無(wú)參構(gòu)造器复局。

java 中若要在子類(lèi)調(diào)用父類(lèi)的方法赘被,需使用關(guān)鍵字super。

面向?qū)ο缶幊獭^承和多態(tài)

1肖揣、為什么使用繼承

從已有的類(lèi)派生出新的類(lèi)民假,稱(chēng)為繼承。

在不同的類(lèi)中也可能會(huì)有共同的特征和動(dòng)作龙优,可以把這些共同的特征和動(dòng)作放在一個(gè)類(lèi)中羊异,讓其它類(lèi)共享。

因此可以定義一個(gè)通用類(lèi)彤断,然后將其擴(kuò)展為其它多個(gè)特定類(lèi)野舶,這些特定類(lèi)繼承通用類(lèi)中的特征和動(dòng)作。

繼承是 Java 中實(shí)現(xiàn)軟件重用的重要手段宰衙,避免重復(fù)平道,易于維護(hù),易于理解供炼。

2一屋、父類(lèi)和子類(lèi)

如果類(lèi) B 從類(lèi) A 派生,或者說(shuō)類(lèi) B 擴(kuò)展自類(lèi) A袋哼,或者說(shuō)類(lèi) B 繼承類(lèi) A冀墨,

則稱(chēng)類(lèi) A 為"父類(lèi)",也稱(chēng)為超類(lèi)涛贯、基類(lèi)诽嘉;

稱(chēng)類(lèi) B 為"子類(lèi)",也稱(chēng)為次類(lèi)弟翘、擴(kuò)展類(lèi)虫腋、派生類(lèi)。

子類(lèi)從它的父類(lèi)中繼承可訪問(wèn)的數(shù)據(jù)域和方法稀余,也可以添加新的數(shù)據(jù)域和新的方法悦冀。

定義繼承的語(yǔ)法:

修飾符 class 子類(lèi)名 extends 父類(lèi)名

例如:Shape 類(lèi)是父類(lèi),其子類(lèi)可以有 Circle 類(lèi)滚躯、Rectangle 類(lèi)雏门、Triangle 類(lèi),等等掸掏。

繼承的注意點(diǎn):

3茁影、super 關(guān)鍵字

super 表示使用它的類(lèi)的父類(lèi)。super 可用于:

調(diào)用父類(lèi)的構(gòu)造方法語(yǔ)法:

super(); 或 super(參數(shù)列表);

注意:super 語(yǔ)句必須是子類(lèi)構(gòu)造方法的第一條語(yǔ)句丧凤。不能在子類(lèi)中使用父類(lèi)構(gòu)造方法名來(lái)調(diào)用父類(lèi)構(gòu)造方法募闲。 父類(lèi)的構(gòu)造方法不被子類(lèi)繼承。調(diào)用父類(lèi)的構(gòu)造方法的唯一途徑是使用 super 關(guān)鍵字愿待,如果子類(lèi)中沒(méi)顯式調(diào)用浩螺,則編譯器自動(dòng)將 super(); 作為子類(lèi)構(gòu)造方法的第一條語(yǔ)句。這會(huì)形成一個(gè)構(gòu)造方法鏈仍侥。

靜態(tài)方法中不能使用 super 關(guān)鍵字要出。

調(diào)用父類(lèi)的方法語(yǔ)法:

super.方法名(參數(shù)列表);

如果是繼承的方法,是沒(méi)有必要使用 super 來(lái)調(diào)用农渊,直接即可調(diào)用患蹂。但如果子類(lèi)覆蓋或重寫(xiě)了父類(lèi)的方法,則只有使用 super 才能在子類(lèi)中調(diào)用父類(lèi)中的被重寫(xiě)的方法砸紊。

4传于、this 關(guān)鍵字

this 關(guān)鍵字表示當(dāng)前對(duì)象∽硗纾可用于:

調(diào)用當(dāng)前類(lèi)的構(gòu)造方法沼溜,并且必須是方法的第一條語(yǔ)句。如:this(); 調(diào)用默認(rèn)構(gòu)造方法游添。this(參數(shù)); 調(diào)用帶參構(gòu)造方法系草。

限定當(dāng)前對(duì)象的數(shù)據(jù)域變量。一般用于方法內(nèi)的局部變量與對(duì)象的數(shù)據(jù)域變量同名的情況唆涝。如 this.num = num悄但。this.num 表示當(dāng)前對(duì)象的數(shù)據(jù)域變量 num,而 num 表示方法中的局部變量石抡。

調(diào)用父類(lèi)的構(gòu)造方法檐嚣;

調(diào)用父類(lèi)的方法(子類(lèi)覆蓋了父類(lèi)的方法時(shí));

訪問(wèn)父類(lèi)的數(shù)據(jù)域(可以這樣用但沒(méi)有必要這樣用)啰扛。

子類(lèi)不是父類(lèi)的子集嚎京,子類(lèi)一般比父類(lèi)包含更多的數(shù)據(jù)域和方法。

父類(lèi)中的 private 數(shù)據(jù)域在子類(lèi)中是不可見(jiàn)的隐解,因此在子類(lèi)中不能直接使用它們鞍帝。

繼承是為"是一個(gè)"的關(guān)系建模的,父類(lèi)和其子類(lèi)間必須存在"是一個(gè)"的關(guān)系煞茫,否則不能用繼承帕涌。

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 七六零摄凡,二五零,五四一 】蚓曼,無(wú)論你是大牛還是小白亲澡,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具纫版,很多干貨和技術(shù)資料分享床绪!

但也并不是所有"是一個(gè)"的關(guān)系都應(yīng)該用繼承。例如其弊,正方形是一個(gè)矩形癞己,但不能讓 Square 類(lèi)來(lái)繼承 Rectangle 類(lèi),因?yàn)檎叫尾荒軓木匦螖U(kuò)展得到任何東西梭伐。正確的繼承關(guān)系是 Square 類(lèi)繼承 Shape 類(lèi)

Java 只允許單一繼承(即一個(gè)子類(lèi)只能有一個(gè)直接父類(lèi))痹雅,C++ 可以多重繼承(即一個(gè)子類(lèi)有多個(gè)直接父類(lèi))。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末糊识,一起剝皮案震驚了整個(gè)濱河市练慕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌技掏,老刑警劉巖铃将,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哑梳,居然都是意外死亡劲阎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)鸠真,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悯仙,“玉大人,你說(shuō)我怎么就攤上這事吠卷∥ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵祭隔,是天一觀的道長(zhǎng)货岭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)疾渴,這世上最難降的妖魔是什么千贯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮搞坝,結(jié)果婚禮上搔谴,老公的妹妹穿的比我還像新娘。我一直安慰自己桩撮,他們只是感情好敦第,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布峰弹。 她就那樣靜靜地躺著,像睡著了一般芜果。 火紅的嫁衣襯著肌膚如雪鞠呈。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天师幕,我揣著相機(jī)與錄音粟按,去河邊找鬼诬滩。 笑死霹粥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疼鸟。 我是一名探鬼主播后控,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼空镜!你這毒婦竟也來(lái)了浩淘?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吴攒,失蹤者是張志新(化名)和其女友劉穎张抄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洼怔,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡署惯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镣隶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片极谊。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖安岂,靈堂內(nèi)的尸體忽然破棺而出轻猖,到底是詐尸還是另有隱情,我是刑警寧澤域那,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布咙边,位于F島的核電站,受9級(jí)特大地震影響次员,放射性物質(zhì)發(fā)生泄漏样眠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一翠肘、第九天 我趴在偏房一處隱蔽的房頂上張望檐束。 院中可真熱鬧,春花似錦束倍、人聲如沸被丧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)甥桂。三九已至柿究,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間黄选,已是汗流浹背蝇摸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留办陷,地道東北人貌夕。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像民镜,于是被迫代替她去往敵國(guó)和親啡专。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • 繼承的概念 繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石制圈,因?yàn)樗试S創(chuàng)建分等級(jí)層次的類(lèi)们童。 繼承就是子類(lèi)繼承父類(lèi)的特征和...
    耳東陳_f1e5閱讀 967評(píng)論 0 4
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫(xiě)文章鲸鹦,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 2,732評(píng)論 2 9
  • 一慧库、Java 簡(jiǎn)介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚(yú)_t_閱讀 4,154評(píng)論 1 44
  • 整理來(lái)自互聯(lián)網(wǎng) 1,JDK:Java Development Kit馋嗜,java的開(kāi)發(fā)和運(yùn)行環(huán)境齐板,java的開(kāi)發(fā)工具...
    Ncompass閱讀 1,534評(píng)論 0 6
  • 楔子 阿遲恍惚在想,她是什么時(shí)候成了現(xiàn)在這一副人不人鬼不鬼的死樣子的呢嵌戈,她明明只雙十年華覆积,為什么感覺(jué)自己即將死去了...
    若黛玉笑了閱讀 345評(píng)論 0 0