更新時(shí)間:2021年06月15日16時(shí)51分 來源:傳智教育 瀏覽次數(shù):
在Java中,類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上去構(gòu)建一個(gè)新的類,構(gòu)建出來的新類被稱作子類,現(xiàn)有類被稱作父類或基類,子類會(huì)自動(dòng)擁有父類所有可繼承的屬性和方法。
在程序中,如果想聲明一個(gè)類繼承另一個(gè)類,需要使用extends關(guān)鍵字,其基本語法格式如下:
[修飾符] class 子類名 extends 父類名 { // 程序核心代碼 }
在上述語法格式中,類的修飾符是可選的,用來指定類的訪問權(quán)限,可以使用public或者省略不寫;子類名和父類名都是必選的,并且子類與父類之間要使用extends關(guān)鍵字實(shí)現(xiàn)繼承關(guān)系。
接下來通過一個(gè)案例來學(xué)習(xí)子類是如何繼承父類的,如文件1所示。
文件1 Example01.java
// 定義Animal類 class Animal { String name; // 聲明name屬性 // 定義動(dòng)物叫的方法 void shout() { System.out.println("動(dòng)物發(fā)出叫聲"); } } // 定義Dog類繼承Animal類 class Dog extends Animal { // 定義一個(gè)打印name的方法 public void printName() { System.out.println("name=" + name); } } // 定義測(cè)試類 public class Example01 { public static void main(String[] args) { Dog dog = new Dog(); // 創(chuàng)建一個(gè)Dog類的實(shí)例對(duì)象 dog.name = "沙皮狗"; // 為dog對(duì)象的name屬性進(jìn)行賦值 dog.printName(); // 調(diào)用dog對(duì)象的printName()方法 dog.shout(); // 調(diào)用Dog類繼承來的shout()方法 } }
運(yùn)行結(jié)果如圖2所示。
圖2 運(yùn)行結(jié)果
在文件1中,Dog類通過extends關(guān)鍵字繼承了Animal類,這樣Dog類便是Animal類的子類。從圖2可以看出,子類雖然沒有聲明name屬性和shout()方法,但是卻能訪問這兩個(gè)成員。這就說明,子類在繼承父類的時(shí)候,會(huì)自動(dòng)擁有父類所有公共的成員。
在實(shí)現(xiàn)類的繼承中,需要注意一些問題,具體如下:
(1)在Java中,類只支持單繼承,不允許多重繼承,也就是說一個(gè)類只能有一個(gè)直接父類,例如下面這種情況是不合法的。
class A{} class B{} class C extends A,B{} // C類不可以同時(shí)繼承A類和B類
(2)多個(gè)類可以繼承同一個(gè)父類,例如下面這種情況是允許的。
class A{} class B extends A{} class C extends A{} // 類B和類C都可以繼承類A
(3)在Java中,多層繼承是可以的,即一個(gè)類的父類可以再去繼承另外的父類,例如下面這種情況是允許的。
class A{} class B extends A{} // 類B繼承類A,類B是類A的子類 class C extends B{} // 類C繼承類B,類C是類B的子類,同時(shí)也是類A的子類
(4)在Java中,子類和父類是一種相對(duì)概念,也就是說,一個(gè)類是某個(gè)類父類的同時(shí),也可以是另一個(gè)類的子類。例如上面的第3個(gè)示例中,B類是A類的子類,同時(shí)又是C類的父類。
北京校區(qū)