、繼承
一、概述:
在Java中,類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類被稱做子類,現有類被稱做父類,子類會自動擁有父類全部可繼承的屬性和方法。
二、格式
經過 extends 關鍵字,能夠聲明一個子類繼承另一個父類
[Java] 純文本查看 複製代碼
?ide
class 父類 {函數
...
}
class 子類 extends 父類 {測試
...
}this
舉例:
[Java] 純文本查看 複製代碼
?code
/*對象
*/
class Employee {繼承
String name; // 定義name屬性 // 定義員工的工做方法 public void work() { System.out.println("全力以赴地工做"); }
}
/*class
*/
class Teacher extends Employee {基礎
// 定義一個打印name的方法 public void printName() { System.out.println("name=" + name); }
}
/*變量
*/
public class ExtendDemo01 {
public static void main(String[] args) { // 建立一個講師類對象 Teacher t = new Teacher(); // 爲該員工類的name屬性進行賦值 t.name = "小明"; // 調用該員工的printName()方法 t.printName(); // name = 小明 // 調用Teacher類繼承來的work()方法 t.work(); // 全力以赴地工做 }
}
三、繼承的好處
1.提升代碼的複用性。
2.類與類之間產生了關係,是多態的前提。
四、繼承後的特色
1.成員變量不重名
[Java] 純文本查看 複製代碼
?
class Fu {
// Fu中的成員變量。 int num = 5;
}
class Zi extends Fu {
// Zi中的成員變量 int num2 = 6; // Zi中的成員方法 public void show() { // 訪問父類中的num, System.out.println("Fu num="+num); // 繼承而來,因此直接訪問。 // 訪問子類中的num2 System.out.println("Zi num2="+num2); }
}
class ExtendDemo02 {
public static void main(String[] args) { // 建立子類對象 Zi z = new Zi(); // 調用子類中的show方法 z.show(); }
}
演示結果:
Fu num = 5
Zi num2 = 6
2.成員變量重名
[Java] 純文本查看 複製代碼
?
class Fu {
// Fu中的成員變量。 int num = 5;
}
class Zi extends Fu {
// Zi中的成員變量 int num = 6; public void show() { // 訪問父類中的num System.out.println("Fu num=" + super.num); // 訪問子類中的num System.out.println("Zi num=" + this.num); }
}
class ExtendsDemo03 {
public static void main(String[] args) { // 建立子類對象 Zi z = new Zi(); // 調用子類中的show方法 z.show(); }
}
演示結果:
Fu num = 5
Zi num = 6
注意:
子父類中出現了同名的成員變量時,在子類中須要訪問父類中非私有成員變量時,須要使用super 關鍵字,修飾父類成員變量,相似於以前學過的 this 。
使用格式:super.父類成員變量名
3.成員方法不重名
[Java] 純文本查看 複製代碼
?
class Fu{
public void show(){ System.out.println("Fu類中的show方法執行"); }
}
class Zi extends Fu{
public void show2(){ System.out.println("Zi類中的show2方法執行"); }
}
public class ExtendsDemo04{
public static void main(String[] args) { Zi z = new Zi(); //子類中沒有show方法,可是能夠找到父類方法去執行 z.show(); z.show2(); }
}
4.成員方法重名(重寫override)
方法重寫:子類中出現與父類如出一轍的方法時(返回值類型,方法名和參數列表都相同),會出現覆蓋效果,也稱爲重寫或者複寫。聲明不變,從新實現。
五、注意事項
1.子類方法覆蓋父類方法,必需要保證權限大於等於父類權限。
2.子類方法覆蓋父類方法,返回值類型、函數名和參數列表都要如出一轍。
3.私有方法不能被重寫(父類私有成員子類是不能繼承的)
六、super和this
super :表明父類的存儲空間標識(能夠理解爲父親的引用)。
this :表明當前對象的引用(誰調用就表明誰)。
訪問成員:
this.成員變量 -- 本類的
super.成員變量 -- 父類的
this.成員方法名() -- 本類的
super.成員方法名() -- 父類的
七、繼承特色1.Java只支持單繼承,不支持多繼承。2.Java支持多層繼承(繼承體系)。3.全部的類都直接或者間接繼承了Object類,Object類是全部類的父類。