繼承
• 繼承概要
Java繼承是面向對象的最顯著的一個特征。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的能力
繼承所表達的就是一種對象類之間的相交關系,它使得某類對象可以繼承另外一類對象的數據成員和成員方法。若類B繼承類A,則屬於B的對象便具有類A的全部或部分性質(數據屬性)和功能(操作),我們稱被繼承的類A為基類、父類或超類,而稱繼承類B為A的派生類或子類。
• 繼承的好處:
體現代碼的可復用行、擴展性。
• 代碼演示:
Dog狗
/**狗*/ blic class Dog { /**名稱*/ public String name; /**顏色*/ public String color; /**價格*/ public double price; /**顯示信息*/ public void show(){ System.out.println("名稱:"+name+",顏色:"+color); } }
Cat貓
/**貓*/ public class Cat { /**名稱*/ public String name; /**顏色*/ public String color; /**重量*/ public double weight; /**顯示信息*/ public void show(){ System.out.println("名稱:"+name+",顏色:"+color); } }
zoo動物園
/**動物園*/ public class Zoo { public static void main(String[] args) { Dog dog=new Dog(); dog.name="吉娃娃狗"; dog.color="綠色"; dog.price=19800.7; dog.show(); Cat cat=new Cat(); cat.name="波斯貓"; cat.color="紅色"; cat.weight=18.5; cat.show(); } }
運行結果:

上面的代碼實現了基本功能,但有問題,主要是:name,color,show重復,如果系統中的動物類再增加將不停的重復,重復就會帶來不便修改,不便維護的問題。
•實現繼承
要解決上面的問題可以使用繼承,達到代碼復用的目的。
Animal動物 :
package com.demo.test3; /*動物*/ public class Animal { public String name; //名稱 public String color; //顏色 //顯示信息 public void show(){ System.out.println("名稱:"+name+",顏色:"+color); } }
Dog狗:
package com.demo.test3; //狗繼承動物 public class Dog extends Animal { public double price; //價格 }
Cat貓:
package com.demo.test3;
public class Cat extends Animal {
public double weight; //體重
}
Zoo動物園:
package com.demo.test3; public class Zoo { public static void main(String[] args) { Dog dog = new Dog(); dog.name="吉娃娃"; dog.color="綠色"; dog.price=144.1; dog.show(); Cat cat = new Cat(); cat.name="波斯貓"; cat.color="紅色"; cat.weight=10.5; cat.show(); } }
從示例中可見dog並沒有定義color屬性,但在使用中可以調用,是因為dog繼承了父類Animal,父類的非私有成員將被子類繼承。如果再定義其它的動物類則無須再反復定義name,color與show方法。
•Java繼承的特征
1.傳遞性
若類C繼承類B,類B繼承類A(多繼承),則類C既有從類B那里繼承下來的屬性與方法,也有從類A那里繼承下來的屬性與方法,還可以有自己新定義的屬性和方法。繼承來的屬性和方法盡管是隱式的,但仍是類C的屬性和方法。
2.單根性
若類B繼承類A,那么建立類B時只需要再描述與基類(類A)不同的少量特征(數據成員和成員方法)即可。這種做法能減小代碼和數據的冗余度,大大增加程序的重用性。
3.子類調用父類成員
a.使用super關鍵字調用父類成員
b.子類默認會先調用父類的無參構造方法,如果父沒有則報錯,可以手動指定,但必須在第一行
實例:
Animal :
package com.demo.test4; //動物 public class Animal { public String name; //名稱 public String color; //顏色 public Animal(){ System.out.println("這是動物類你空構造方法"); } public Animal(String name,String color){ this.name = name; this.color = color; } //顯示信息 public void show(){ System.out.println("名稱:"+name+",顏色:"+color); } }
Dog :
package com.demo.test4; public class Dog extends Animal { public Dog(String name,String color,double price) { super(name,color); //調用父類構造方法 this.price=price; //調用當前對象的成員 } public double price; //價格 //重寫父類方法 public void show(){ super.show(); //子類調用父類方法 System.out.println("價格:"+this.price); } }
Cat: :
package com.demo.test4; //貓 public class Cat extends Animal{ public double weight; }
Zoo :
package com.demo.test4; public class Zoo { public static void main(String[] args) { Dog dog = new Dog("中華田園犬","藍色",123.56); dog.show(); Cat cat = new Cat(); cat.name = "波斯貓"; cat.color = "紅色"; cat.weight = 18.5; cat.show(); } }