教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

什么是繼承?類的繼承如何重寫父類?

更新時(shí)間:2022年03月30日14時(shí)04分 來源:傳智教育 瀏覽次數(shù):

繼承的概念

在Java中,類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上去產(chǎn)生一個(gè)新的類,產(chǎn)生的新類被稱作子類,現(xiàn)有類被稱作父類,子類會自動(dòng)擁有父類的屬性和方法。例如定義一個(gè)Animal類作為父類,該類擁有一個(gè)call()方法,當(dāng)子類Cow和Sheep繼承自Animal類時(shí),就會自動(dòng)擁有call()方法,接下來通過一個(gè)圖例來描述類的繼承關(guān)系,如圖3-11所示。

動(dòng)物繼承關(guān)系圖

圖3-11動(dòng)物繼承關(guān)系圖

在程序代碼中,如果想定義一個(gè)類繼承另一個(gè)類,需要使用extends關(guān)鍵字。如果一個(gè)類沒有使用extends關(guān)鍵字明確標(biāo)識繼承另一個(gè)類,那么這個(gè)類就是默認(rèn)繼承Object類。Object類是所有類的父類,那么該類中的方法適用于他的所有子類,其類中常用的方法有toString()、hashCode()方法等。

注意:

在類的繼承中,需要注意以下幾個(gè)問題,具體如下:

1、在Java中,類只支持單繼承,不允許多重繼承,也就是說一個(gè)類只能有一個(gè)直接父類。例如Cow這個(gè)類繼承Animal之后,就不允許繼承其他類。

2、多個(gè)類可以繼承一個(gè)父類,例如Cow和Sheep都可以繼承Animal類。

3、在Java中,多層繼承是允許的,即一個(gè)類的父類可以再去繼承其他的父類,例如Zebra類繼承自Horse類,而Horse類又可以去繼承Animal類,即子孫三代。

重寫父類方法

在繼承關(guān)系中,子類會繼承父類中定義的方法,但子類也可以在父類的基礎(chǔ)上擁有自己的特征,即對父類的方法進(jìn)行重寫。需要注意的是,在子類中重寫的方法必須與父類被重寫的方法具有相同的方法名、參數(shù)列表以及返回值類型。接下來通過一個(gè)案例來演示如何實(shí)現(xiàn)子類重寫父類的方法。具體步驟如下:

1.創(chuàng)建Animal類

創(chuàng)建一個(gè)Animal類,并在類中定義兩個(gè)方法call()和sleep(),分別在兩個(gè)方法中輸出“動(dòng)物發(fā)出的聲音”和“動(dòng)物在睡覺”的信息,如文件3-19所示。

文件3-19Animal.java

package com.itheima.example10;
// 定義Animal類
public class Animal {
    // 定義動(dòng)物叫的方法
    public void call()
    System.out.println("動(dòng)物發(fā)出聲音...");
    }
    // 定義動(dòng)物睡覺的方法
    public void sleep() {
    System.out.println("動(dòng)物在睡覺...");
    }
}

2.創(chuàng)建Cow類創(chuàng)建一個(gè)Cow類,使其繼承Animal類,并在Animal類重寫call()方法,如文件3-20所示。

文件3-20Cow.java

java1package com.itheima.example10;
// 定義Cow類繼承Animal類
public class Cow extends Animal {
    // 定義一個(gè)打印name的方法
    public void call() {
        System.out.println("哞...");
    }
}

3.創(chuàng)建測試類

創(chuàng)建一個(gè)測試類Example10,分別調(diào)用call()方法和sleep()方法,如文件3-21所示。

文件3-21Example10.java

package com.itheima.example10;
public class Example10 {
    public static void main(String[] args) {
        Cow c = new Cow(); // 創(chuàng)建一個(gè)Cow類的實(shí)例對象
        c.call(); // 調(diào)用Cow重寫的call()方法
        c.sleep(); // 調(diào)用父類Animal的sleep()方法
    }
}

運(yùn)行結(jié)果如圖3-12所示。

創(chuàng)建測試類

圖3-12運(yùn)行結(jié)果從圖3-12的運(yùn)行結(jié)果可以看出,當(dāng)子類繼承父類的時(shí)候,會擁有父類中所有的成員,由此可知,在調(diào)用sleep()方法時(shí),會自動(dòng)調(diào)用父類的sleep()方法。當(dāng)子類重寫了父類方法之后,創(chuàng)建的子類對象會自動(dòng)調(diào)用重寫的方法,即調(diào)用的是子類的call()方法。

注意:子類重寫父類方法時(shí),不可以使用比父類中被重寫的方法更嚴(yán)格的訪問權(quán)限,如:父類中的方法是public的,子類的方法就不可以是private的。



猜你喜歡:

什么是繼承?Java中如何聲明一個(gè)類繼承另一個(gè)類?

Java培訓(xùn)實(shí)戰(zhàn)教程之Java基礎(chǔ)知識精華部分

如何理解單繼承?單繼承的語法格式介紹

Java怎樣正確重寫父類?

傳智教育Java培訓(xùn)課程

0 分享到:
和我們在線交談!