国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

0010 繼承

2019-11-14 09:55:28
字體:
供稿:網(wǎng)友

繼承的定義

  繼承可以看成是類與類之間的衍生關(guān)系。比如狗類是動物類,牧羊犬類又是狗類。于是我們可以說狗類繼承了動物類,而牧羊犬類就繼承了狗類。于是狗類就是動物類的子類(或派生類),動物類就是狗類的父類(或基類)。

  在 java 中一個類只有一個父類,所以 Java 中的繼承是單繼承。就像我們每個人只有一個親生父親,而我們?nèi)绻幸粋€有錢的父親我們就是富二代;有一個明星父親,我們就是星二代。繼承可以讓子類直接擁有父類的所有屬性和方法(屬性和方法的修飾符是 PRivate 就不行,因為是私有的嘛)。而繼承的好處便是可以實現(xiàn)代碼的復用,使我們程序猿的福利啊!  

我們創(chuàng)建一個類需要它來繼承某一個類的語法:

class 子類 extends 父類

例如我們定義了一個 Animal 類,我們在創(chuàng)建一個 Dog 類,我們需要它繼承 Animal 類

class Dog extends Animal {    ...}

我們先創(chuàng)建一個父類 Animal

package com.shiyanlou;public class Animal {    public int legNum;     //動物四肢的數(shù)量    //類方法    public void bark() {        System.out.println("動物叫!");    }}

接下來創(chuàng)建一個子類

1、點擊創(chuàng)建 class 類

2、輸入子類名稱,點擊Superclass后面的Browse...尋找父類,與之建立繼承關(guān)系

子類命名

3、在Choose a type:下的輸入框內(nèi)輸入要尋找的父類,然后選擇,結(jié)束。

搜索父類

package com.shiyanlou;public class Dog extends Animal {}

上面便是系統(tǒng)生成的代碼,Dog 類繼承了父類 Animal,我們 Dog 類里什么都沒有寫,其實它繼承了父類 Animal,所以 Dog 類擁有 Animal 類的全部方法和屬性(除開私有的方法和屬性)。我們創(chuàng)建一個測試類測試一下。

繼承代碼示例

方法的重寫

  雖然子類可以繼承父類的方法,但如果子類對父類的方法不滿意,子類想在里面加入適合自己的一些操作時,我們就需要將方法進行重寫。并且子類在調(diào)用方法中,優(yōu)先調(diào)用子類的方法    

       比如上一個例子中 Animal 有bark()這個方法代表了動物叫,但是不同的動物有不同的叫法,比如狗是汪汪汪,貓是喵喵喵。    

       當然在方法重寫時我們需要注意,重寫的方法一定要與原父類的方法語法保持一致,比如返回值類型,參數(shù)類型及個數(shù),和方法名都必須一致。  

例如:

package com.shiyanlou;public class Dog extends Animal {    //重寫父類方法        public void bark() {        System.out.println("汪!汪!汪!");    }}

繼承的初始化順序

  我們學習了繼承后,知道在一個繼承關(guān)系中一定會有一個父類和至少一個子類,那么在程序運行的過程中,是為父類進行初始化,還是先調(diào)用的子類進行初始化的呢?    繼承的初始化順序是先初始化父類再初始化子類。

  我們根據(jù)代碼來驗證一下。

package com.shiyanlou;public class Animal {    public int legNum = 4; // 動物四肢的數(shù)量    //Animal的構(gòu)造方法    public Animal(){        System.out.println("動物有" + legNum + "腿");        System.out.println("父類的構(gòu)造方法被調(diào)用!");    }}
package com.shiyanlou;public class Dog extends Animal {    //Dog類的構(gòu)造方法    public Dog(){        System.out.println("子類的構(gòu)造方法被調(diào)用!");    }}
package com.shiyanlou;public class test {    public static void main(String[] args) {        // TODO Auto-generated method stub        Dog a = new Dog(); //生成一個Dog類對象a    }}

最后輸出結(jié)果:

輸出結(jié)果

  由此可知,系統(tǒng)先創(chuàng)建了父類對象,再創(chuàng)建了子類對象,先初始化了屬性,再調(diào)用了構(gòu)造函數(shù)。    

補充知識點:

final關(guān)鍵字可以修飾類、方法、屬性和變量

final 修飾類,則該類不允許被繼承

final 修飾方法,則該方法不允許被覆蓋(重寫)

final 修飾屬性:則該類的屬性不會進行隱式的初始化(類的初始化屬性必須有值)或在構(gòu)造方法中賦值(但只能選其一)

final 修飾變量,則該變量的值只能賦一次值,即變?yōu)槌A?/p>

super關(guān)鍵字在子類內(nèi)部使用,代表父類對象

訪問父類的屬性 super.屬性名

訪問父類的方法 super.bark()


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 通渭县| 营山县| 贺州市| 张家界市| 嘉鱼县| 奉新县| 南平市| 克拉玛依市| 宜宾县| 嘉峪关市| 许昌市| 布尔津县| 高碑店市| 义乌市| 永川市| 美姑县| 昌乐县| 闽侯县| 靖江市| 寻甸| 尼勒克县| 佛山市| 博乐市| 牟定县| 广水市| 喀什市| 平度市| 永胜县| 遵义县| 丰原市| 苍山县| 邢台市| 扎鲁特旗| 南充市| 丹江口市| 奈曼旗| 泸水县| 原平市| 遂宁市| 博湖县| 旅游|