更新時(shí)間:2022年03月30日14時(shí)04分 來源:傳智教育 瀏覽次數(shù):
繼承的概念
在Java中,類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上去產(chǎn)生一個(gè)新的類,產(chǎn)生的新類被稱作子類,現(xiàn)有類被稱作父類,子類會(huì)自動(dòng)擁有父類的屬性和方法。例如定義一個(gè)Animal類作為父類,該類擁有一個(gè)call()方法,當(dāng)子類Cow和Sheep繼承自Animal類時(shí),就會(huì)自動(dòng)擁有call()方法,接下來通過一個(gè)圖例來描述類的繼承關(guān)系,如圖3-11所示。
圖3-11動(dòng)物繼承關(guān)系圖
在程序代碼中,如果想定義一個(gè)類繼承另一個(gè)類,需要使用extends關(guān)鍵字。如果一個(gè)類沒有使用extends關(guān)鍵字明確標(biāo)識(shí)繼承另一個(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)系中,子類會(huì)繼承父類中定義的方法,但子類也可以在父類的基礎(chǔ)上擁有自己的特征,即對(duì)父類的方法進(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)建測(cè)試類
創(chuàng)建一個(gè)測(cè)試類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í)例對(duì)象 c.call(); // 調(diào)用Cow重寫的call()方法 c.sleep(); // 調(diào)用父類Animal的sleep()方法 } }
運(yùn)行結(jié)果如圖3-12所示。
圖3-12運(yùn)行結(jié)果從圖3-12的運(yùn)行結(jié)果可以看出,當(dāng)子類繼承父類的時(shí)候,會(huì)擁有父類中所有的成員,由此可知,在調(diào)用sleep()方法時(shí),會(huì)自動(dòng)調(diào)用父類的sleep()方法。當(dāng)子類重寫了父類方法之后,創(chuàng)建的子類對(duì)象會(huì)自動(dòng)調(diào)用重寫的方法,即調(diào)用的是子類的call()方法。
注意:子類重寫父類方法時(shí),不可以使用比父類中被重寫的方法更嚴(yán)格的訪問權(quán)限,如:父類中的方法是public的,子類的方法就不可以是private的。
什么是繼承?Java中如何聲明一個(gè)類繼承另一個(gè)類?
北京校區(qū)