1. 程式人生 > 實用技巧 >2020/7/4 繼承

2020/7/4 繼承

一、繼承

  1、繼承的概念:在程式中,繼承描述的是事物之間的所屬關係,通過繼承可以使多種事物之間形成一種關係體系。

          例如公司中的研發部員工和維護部員工都屬於員工,程式中便可以描述為研發部員工和維護部員工繼承自員工,

          同理,JavaEE工程師和Android工程師繼承自研發部員工,而網路維護工程師和硬體維護工程師繼承自維護部員工。

          這些員工之間會形成一個繼承體系,具體如下圖所示:

          

  

          在Java中,類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類被稱作子類,

          現有類被稱作父類,子類會自動擁有父類所有可繼承的屬性和方法。

  2、繼承的格式和使用

    格式:class 子類 extends 父類 {}

    

/*
 * 定義員工類Employee
 */
class Employee {
    String name; // 定義name屬性
    // 定義員工的工作方法
    public void work() {
        System.out.println("盡心盡力地工作");
    }
}

/*
 * 定義研發部員工類Developer 繼承 員工類Employee
 */
class Developer extends Employee {
    // 定義一個列印name的方法
    public
void printName() { System.out.println("name=" + name); } } /* * 定義測試類 */ public class Example01 { public static void main(String[] args) { Developer d = new Developer(); // 建立一個研發部員工類物件 d.name = "小明"; // 為該員工類的name屬性進行賦值 d.printName(); // 呼叫該員工的printName()方法 d.work(); //
呼叫Developer類繼承來的work()方法 } }

  3、繼承的好處&注意事項

    繼承的好處:

        1、繼承的出現提高了程式碼的複用性,提高軟體開發效率。

        2、繼承的出現讓類與類之間產生了關係,提供了多型的前提。

    在類的繼承中,需要注意一些問題,具體如下:

        1、在Java中,類只支援單繼承,不允許多繼承,也就是說一個類只能有一個直接父類,例如下面這種情況是不合法的。

          class A{}

          class B{}

          class C extends A,B{} // C類不可以同時繼承A類和B類

        2、多個類可以繼承一個父類,例如下面這種情況是允許的。

          class A{}

          class B extends A{}

          class C extends A{} // 類B和類C都可以繼承類A

        3、在Java中,多層繼承是可以的,即一個類的父類可以再去繼承另外的父類,

         例如C類繼承自B類,而B類又可以去繼承A類,這時,C類也可稱作A類的子類。下面這種情況是允許的。

          class A{}

          class B extends A{} // 類B繼承類A,類B是類A的子類

          class C extends B{} // 類C繼承類B,類C是類B的子類,同時也是類A的子類


        4、在Java中,子類和父類是一種相對概念,也就是說一個類是某個類父類的同時,也可以是另一個類的子類。

          例如上面的這種情況中,B類是A類的子類,同時又是C類的父類。

  4、繼承-子父類中成員方法特點-重寫&應用

    子父類中成員方法的特點:

      當在程式中通過物件呼叫方法時,會先在子類中查詢有沒有對應的方法,若子類中存在就會執行子類中的方法,若子類中不存在就會執行父類中相應的方法。

  5、方法重寫的注意事項

    重寫需要注意的細節問題:

      子類方法覆蓋父類方法,必須要保證許可權大於等於父類許可權。  

class Fu(){    
void show(){}
    public void method(){}
}
class Zi extends Fu{
public void show(){}  //編譯執行沒問題
    void method(){}      //編譯錯誤
}

    寫法上稍微注意:必須一模一樣:方法的返回值型別 方法名 引數列表都要一樣。
    總結:當一個類是另一個類中的一種時,可以通過繼承,來繼承屬性與功能。如果父類具備的功能內容需要子類特殊定義時,進行方法重寫。

class Fu{
    public void show(){
        System.out.println("Fu類中的show方法執行");
    }
}
class Zi extends Fu{
    public void show2(){
        System.out.println("Zi類中的show2方法執行");
    }
}
public  class Test{
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show(); //子類中沒有show方法,但是可以找到父類方法去執行
        z.show2();
    }
}

    成員方法特殊情況——覆蓋:

    子類中出現與父類一模一樣的方法時,會出現覆蓋操作,也稱為override重寫、複寫或者覆蓋。   

class Fu
{
    public void show()
    {
        System.out.println("Fu show");
    }
}
class Zi extends Fu
{
    //子類複寫了父類的show方法
    public void show()
    {
        System.out.println("Zi show");
    }
}

    方法重寫(覆蓋)的應用:

    當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容。