天天看點

面向對象三大特性——繼承

面向對象三大特性——繼承

1.繼承涉及的概念

  • 了解:子類自動共享父類資料和方法的機制,這是類之間的關系就是叫做繼承。繼承是在一個現有類型的基礎上,通過增加新的方法或者重定義已有方法(即重寫)的方式,産生一個新的類型。
  • 繼承:被繼承的類稱為父類(超類),繼承父類的類稱為子類(派生類) ,繼承是指一個對象直接使用另一個對象的屬性和方法,通過繼承可以實作代碼重用。
  • super關鍵字:可以通過super關鍵字來實作對父類成員的通路,用來引用目前對象的父類 使用super調用父類中的屬性,調用父類的方法,調用父類中的構造方法 super 表示父類對象的預設引用 super如果子類要調用父類被覆寫的執行個體方法,可用super作為調用者調用父類被覆寫的執行個體方法 使用super調用父類方法,使用super調用父類的構造方法。
  • 方法的覆寫:方法覆寫又稱為重寫;
    • 産生原因:當父類中某個方法不适合于子類時,子類出現父類一模一樣的方法 調用被覆寫的父類方法:使用super.方法名(實參); 方法覆寫時應遵循的原則(一同,兩小,一大): (一同):方法簽名必須相同; (兩小):子類方法的傳回值類型比父類方法的傳回值類型更小或相等;子類方法聲明抛出的異常應比父類方法申明抛出的異常更小或相等 (一大):子類方法的通路權限應比父類方法更大或相等。
  • 子類對象執行個體化過程:
    • 子類對象的執行個體化: 子類對象在執行個體化之前必須首先調用父類中的構造方法之後再調用自身的構造方法;在子類進行執行個體化操作時,首先會讓其父類進行執行個體化操作(調用父類的構造方法),之後子類再自己進行執行個體化操作;
    • 子類通路父類; 子類不能直接通路父類的私有成員,但是子類可以調用父類中的非私有方法來間接通路父類的私有成員。

2.類與繼承

(1)類的分類

  • 類:使用class定義且不含有抽象方法的類。
  • 抽象類:使用abstract class定義的類,它可以含有,也可以不含有抽象方法。
  • 接口:使用interface定義的類。

(2)類的繼承規律

  • 類可以繼承(extends)類,可以繼承(extends)抽象類,可以繼承(implements)接口。
  • 抽象類可以繼承(extends)類,可以繼承(extends)抽象類,可以繼承(implements)接口。
  • 接口隻能繼承(extends)接口。

(3)繼承規律遵循的限制

  • 類和抽象類都隻能最多繼承一個類,或者最多繼承一個抽象類,并且這兩種情況是互斥的,也就是說它們要麼繼承一個類,要麼繼承一個抽象類。
  • 類、抽象類和接口在繼承接口時,不受數量的限制,理論上可以繼承無限多個接口。對于類來說,它必須實作它所繼承的所有接口中定義的全部方法。
  • 抽象類繼承抽象類,或者實作接口時,可以部分、全部或者完全不實作父類抽象類的抽象(abstract)方法,或者父類接口中定義的接口。
  • 類繼承抽象類,或者實作接口時,必須全部實作父類抽象類的全部抽象(abstract)方法,或者父類接口中定義的全部接口。

3.修飾符與繼承

(1)類成員通路修飾符與通路能力之間的關系:

面向對象三大特性——繼承

(2)子類不能繼承父類中通路權限為 private 的成員變量和方法,也不能繼承父類的構造方法。子類可以重寫父類的方法,及命名與父類同名的成員變量。

4.代碼示範,簡單

//父類
    class Human {
        private String name;
        private Integer age;

        public Human(String name,Integer age){
            this.name = name;
            this.age = age;
        }
        public void praise(){
            System.out.println(name+"個子好高,但是才"+age+"歲");
        }
    }
	//子類
    class Man extends Human  {
        public Man(String name,Integer age){
            super(name,age);
        }
    }
    //子類
    class Woman extends Human  {
        public Woman(String name,Integer age){
            super(name, age);
        }
    }
	//簡單運用
    public static void main(String[] args) {
        Man man = new Man("啾啾",11);
        man.praise();
        Woman woman = new Woman("淘淘",6);
        woman.praise();
    }
           

5.繼承的優缺點

  • 優點:提高了代碼的複用性;讓類與類之間産生了關系,提供了多态的前提。
  • 缺點:提高了類之間的耦合性,耦合度高就會造成代碼之間的聯系越緊密,代碼獨立性越差。

繼續閱讀