最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java中的繼承-創(chuàng)新互聯(lián)
繼承 一、概念

繼承就是子類繼承父類的特征和行為,使得子類對(duì)象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為(概念是網(wǎng)上抄的,可以不看),Java中用extends關(guān)鍵字表示繼承。

成都創(chuàng)新互聯(lián)公司主營鶴山網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),鶴山h5微信小程序開發(fā)搭建,鶴山網(wǎng)站營銷推廣歡迎鶴山等地區(qū)企業(yè)咨詢通俗解釋:
  1. 就是兒子(子類)可以繼承父親(父類)的財(cái)產(chǎn)(方法、實(shí)例變量)。
  2. 一個(gè)兒子(子類)只能有一個(gè)親爹(父類),因此Java是單繼承語言,即任何子類都只能繼承一個(gè)父類。
  3. 雖然只能繼承一個(gè)父類,但兒子還有爺爺,即兒子--->父親--->爺爺--->爺爺?shù)母赣H......,從而形成了多層次繼承。

Fig.1 簡單的繼承關(guān)系

Tips:

子類不僅繼承了父類的方法,而且還繼承了父類的實(shí)例變量。

子類繼承的實(shí)例變量實(shí)際上是對(duì)父類中實(shí)例變量的拷貝,在子類中修改實(shí)例變量的值,只會(huì)改變子類中該實(shí)例變量的值,并不會(huì)影響父類中的實(shí)例變量。

//結(jié)果就是:class B的instanceVariable的值變?yōu)?00,而A和C的instanceVariable的值仍然為1。
public class myTest{
    public static void main(String[] args){
        B b = new B();
        b.instanceVariable = 100;
    }
}

class A{
    public int instanceVariable = 1; 
    public void sonMethod(){};
}

class B extends A{
    public void sonMethod(){};
}

class C extends A{
    public void sonMethod(){};
}

二、深入理解

繼承是將多個(gè)子類的共同屬性抽象出來,組成父類。父類是較為抽象的類,而子類是較為具體的類。以動(dòng)物為例子,見Fig.2,動(dòng)物都有叫(makeNoise)、吃(eat)、睡覺(sleep)和散步(roam)的行為(方法),因此將其抽象出來作為父類。

Fig.2 動(dòng)物的繼承關(guān)系

However!雖然動(dòng)物都可以叫(makeNoise),但是他們的叫聲并不相同,貓是喵嗚喵嗚的叫,狗是汪汪的叫,河馬是......我也不知道它怎么叫。因此出現(xiàn)了方法的重寫(override),即子類不僅能繼承父類,但能在父類的基礎(chǔ)上做拓展和改進(jìn)(兒子不僅繼承了父親的財(cái)富,還在父親的基礎(chǔ)上變的更有錢)。

tips:繼承下來的方法可以被覆蓋掉,但是實(shí)例變量不可以被覆蓋。

三、方法的重寫(override)是什么?

子類可以根據(jù)需要,定義屬于自己的行為。既沿襲了父類的功能和名稱。又根據(jù)子類的需要重新實(shí)現(xiàn)父類方法,從而進(jìn)行拓展和增強(qiáng)。

通俗的講,就是在子類中如果創(chuàng)建了一個(gè)與父類相同名稱、相同返回值類型、相同參數(shù)列表的方法(即和父類中的方法一模一樣),只是方法體中的實(shí)現(xiàn)不同,以實(shí)現(xiàn)不同于父類的功能。當(dāng)父類中的方法無法滿足子類需求或子類具有特有功能的時(shí)候,需要方法重寫。

但是重寫(override)有以下的限制:

  1. 重寫的方法不能降低存取權(quán)限。例如父類中的方法是public,在子類中就不能寫成private,但是可以變得更加廣泛。(public, protected, default, private)
  2. 重寫的方法的返回類型必須與父類的返回類型相同。
  3. 不能重寫被標(biāo)識(shí)為final的方法。
  4. 重寫的方法的參數(shù)列表必須與父類方法的參數(shù)列表一樣。否則就不是重寫(override),而是重載(overload)。

Tips: 什么是方法的重載(overload)?

方法的重載是指兩個(gè)方法的名稱相同,但參數(shù)不同。(它與繼承or多態(tài)沒有關(guān)系)

  1. 重載的方法只是剛好有相同的名字,它使同一方法有多個(gè)不同的版本可以調(diào)用(參數(shù)不同)。例如,如果某個(gè)方法需要int類型的參數(shù),調(diào)用方就得將double類型的參數(shù)轉(zhuǎn)換為int然后再調(diào)用。但如果有一個(gè)重載版本的該方法需要的參數(shù)是double類型,使用該方法就變得簡單很多。
  2. 重載方法的返回類型可以不同。
  3. 不能只更改返回類型,而方法的參數(shù)相同。因?yàn)橹匾氖且寕魅敕椒ǖ膮?shù)類型不同。
  4. 可以隨意的修改存取權(quán)限 。(public, protected, default, private)
四、既然子類和父類都有相同名稱的方法,JVM怎么知道調(diào)用哪個(gè)?

這一點(diǎn)不用擔(dān)心,當(dāng)調(diào)用對(duì)象的方法時(shí),JVM會(huì)首先從最低階的開始找起,從下往上,一直找到為止,如Fig.3所示。

Fig.3 對(duì)象引用哪個(gè)方法

五、怎么判斷繼承設(shè)計(jì)的合理與否?

有一個(gè)簡單的判斷方法——“IS-A”測(cè)試,這是一個(gè)判斷思想。例如:三角形是is a多邊形;外科醫(yī)生is a醫(yī)生等等。需要注意,“IS-A”測(cè)試是單向的!例如,多邊形is a三角形,就是錯(cuò)的。

如果繼承層次樹設(shè)計(jì)的合理,那么所有的子類都會(huì)通過任意一個(gè)上層父類的IS-A測(cè)試。例如:B是C的父類,而A又是B的父類,那么C也應(yīng)該能通過is?a?A的測(cè)試。

六、子類中,先使用父類的方法,再加上額外的功能

還是以上述中的動(dòng)物類為例,如果我們想使用父類的roam()方法,但同時(shí)又想再額外加上我們自己的roam()方法,這時(shí)就要使用關(guān)鍵字super。

public void roam(){
    super.roam();
    //下面是my own roam()
    ......
    ......
}

這樣會(huì)先執(zhí)行父類的roam()方法,然后再執(zhí)行下面的my own roam()方法。

七、繼承的意義
  1. 避免了重復(fù)的代碼。
  2. 方便修改代碼。當(dāng)方法變化時(shí),只需修改父類中的內(nèi)容即可,而不用一個(gè)個(gè)的修改子類。
  3. 繼承確保了某個(gè)父類下的所有類都會(huì)有父類所持有的全部方法。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


新聞名稱:Java中的繼承-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://fisionsoft.com.cn/article/phphi.html