真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Java中的繼承-創(chuàng)新互聯(lián)

繼承 一、概念

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

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

Fig.1 簡單的繼承關系

Tips:

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

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

//結果就是: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(){};
}

二、深入理解

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

Fig.2 動物的繼承關系

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

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

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

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

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

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

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

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

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

  1. 重載的方法只是剛好有相同的名字,它使同一方法有多個不同的版本可以調用(參數不同)。例如,如果某個方法需要int類型的參數,調用方就得將double類型的參數轉換為int然后再調用。但如果有一個重載版本的該方法需要的參數是double類型,使用該方法就變得簡單很多。
  2. 重載方法的返回類型可以不同。
  3. 不能只更改返回類型,而方法的參數相同。因為重要的是要讓傳入方法的參數類型不同。
  4. 可以隨意的修改存取權限 。(public, protected, default, private)
四、既然子類和父類都有相同名稱的方法,JVM怎么知道調用哪個?

這一點不用擔心,當調用對象的方法時,JVM會首先從最低階的開始找起,從下往上,一直找到為止,如Fig.3所示。

Fig.3 對象引用哪個方法

五、怎么判斷繼承設計的合理與否?

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

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

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

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

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

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

七、繼承的意義
  1. 避免了重復的代碼。
  2. 方便修改代碼。當方法變化時,只需修改父類中的內容即可,而不用一個個的修改子類。
  3. 繼承確保了某個父類下的所有類都會有父類所持有的全部方法。

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


新聞標題:Java中的繼承-創(chuàng)新互聯(lián)
文章轉載:http://weahome.cn/article/phphi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部