1. 程式人生 > 其它 >面向物件-繼承和多型

面向物件-繼承和多型

1.什麼是繼承

  多個類中存在相同的屬性和行為,將這些屬性和行為提取到單獨的類中,那麼多個類中無需再次定義這些屬性和行為,只需繼承那個類即可。

  通過關鍵字extends可以實現類與類的繼承。

  class 子類名 extends 父類名{}

  案例:學生類和老師類,定義兩個功能(吃飯和學習),都同時為人類

    class Person{

      String name;

      int age;

      public void eat(){ System.out.println("吃飯");}

      public void study(){ System.out.println("學習");}

    }

    class Student extends Person{ } 

    class Teacher extends Person{ }

    public class Test{

    public static void main(String[] args){

    Student student = new Student();

    student.eat();

    student.study();

    Teacher teacher = new Teacher();

    teacher.eat();

    teacher.study();

    {

    {

    繼承的優缺點:

    1)提高了程式碼的複用性。

    2)提高了程式碼的維護性。

    3)讓類與類產生了關係,是多型的前提,同時也是缺點耦合性很強。

    繼承的特點:

    1)一個類只能有一個父類。

    2)支援多層繼承。

      class A{}

      class B extends A{}

      class C extends B{}

    注意事項:子類只能繼承父類所有非私有的成員(成員方法和成員變數) 。

         其實這也體現了繼承的另一個弊端:打破了封裝性

         子類不能繼承父類的構造方法,但是可以通過super(後面講)關鍵字去訪問父類構造方法。       

         不要為了部分功能而去繼承。

    

      繼承中成員變數的關係

      在子類方法中訪問一個變數

        首先在子類區域性範圍找

        然後再子類成員範圍找

        最後再父類成員範圍找(肯定不能訪問到父類區域性範圍)

        如果還是沒有就報錯(不考慮父類的父類...)  

    super關鍵字  

    super的用法和this很像

      this代表本類對應的引用。

      super代表父類儲存空間的標識(可以理解為父類引用)

    用法(this和super均可如下使用)

      訪問成員變數

        this.成員變數   super.成員變數

      訪問構造方法

        this(…)   super(…)

      訪問成員方法

        this.成員方法()   super.成員方法()

    繼承中構造方法的關係

      子類中所有的構造方法預設都會訪問父類中空引數的構造方法 , 因為子類會繼承父類中的資料,可能還會使用父類的資料。所以,子類初始化之前,一定要先完成父類資料的初始化。 每一個構造方法的第一條語句預設都是:super()。

      如何父類中沒有構造方法,子類通過super去顯示呼叫父類其他的帶參的構造方法 子類通過this去呼叫本類的其他構造方法 本類其他構造也必須首先訪問了父類構造 一定要注意: super(…)或者this(….)必須出現在第一條語句山 否則,就會有父類資料的多次初始化。

    通過子類物件去訪問一個方法

      首先在子類中找 然後在父類中找 如果還是沒有就報錯。(不考慮父類的父類…)

    方法重寫概述

      子類中出現了和父類中一模一樣的方法宣告,也被稱為方法覆蓋,方法複寫。

      使用特點: 如果方法名不同,就呼叫對應的方法 如果方法名相同,最終使用的是子類自己的       方法重寫的應用: 當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容。

    方法重寫的注意事項

      父類中私有方法不能被重寫 子類重寫父類方法時,訪問許可權不能更低 父類靜態方法,子類也必須通過靜態方法進行重寫。(其實這個算不上方法重寫,但是現象確實如此)

    final關鍵字

    final關鍵字是最終的意思,可以修飾類,成員變數,成員方法。 修飾類,類不能被繼承 修飾變數,變數就變成了常量,只能被賦值一次 修飾方法,方法不能被重寫

1.什麼是多型。

  一個事物在不同時刻表現出來的不同狀態。

  舉例:貓可以是貓的型別。貓 a = new 貓();

     貓也是動物的一種,也可以把貓稱為動物。動物 b = new 貓();

  注意:多型前提是有繼承關係、有方法重寫、有父類引用指向子類物件。