面向對象特性(二)

、繼承
一、概述:
在Java中,類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類被稱做子類,現有類被稱做父類,子類會自動擁有父類全部可繼承的屬性和方法。
二、格式
經過 extends 關鍵字,能夠聲明一個子類繼承另一個父類
[Java] 純文本查看 複製代碼
?ide

class 父類 {函數

...

}
class 子類 extends 父類 {測試

...

}this

舉例:
[Java] 純文本查看 複製代碼
?code

/*對象

  • 定義員工類Employee,作爲父類

*/
class Employee {繼承

String name; // 定義name屬性
// 定義員工的工做方法
public void work() {
    System.out.println("全力以赴地工做");
}

}
/*class

  • 定義講師類Teacher 繼承 員工類Employee

*/
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類是全部類的父類。

相關文章
相關標籤/搜索