天天看點

java學習——繼承java學習——繼承

java學習——繼承

前言

繼承是面向對象語言的一種特性,利用繼承,人們可以基于一個已存在的類構造一個新類。
繼承已存在的類就是複用(繼承)這些類的方法和域。
在此基礎上,還可以添加一些新的方法和域,以滿足需求。
繼承是java程式設計中的一項核心技術
關鍵字extends表示繼承
           

繼承的格式

public class Animals {}
public class Cat entends Animals {}
           

代碼塊

  • 在java中,使用{}括起來的代碼被稱作代碼塊,根據其位置和生命的不同,分為局部代碼塊,構造代碼塊,靜态代碼塊和同步代碼塊
  • 局部代碼塊:在方法中出現,限定變量生命周期,及早釋放,提高記憶體使用率
  • 構造代碼塊:在類中方法外出現,多個構造方法中相同的代碼存放到一起,每次調用構造都執行,并且在構造方法之前執行
  • 靜态代碼塊:在類中方法外出現,并用static修飾符修飾,用于給類初始化,在類加載時執行一次,并且隻執行一次
  • 一個類的靜态代碼塊,構造代碼塊,構造方法的執行流程:

    靜态代碼塊 > 構造代碼塊 > 父類無參構造方法 > 子類構造方法

繼承的優勢與弊端

  • 繼承的優勢
    • 提高了代碼的複用性
    • 提高了代碼的維護性
    • 讓類與類産生了關系,是多态的前提
  • 繼承的弊端
    • 類的耦合性增強

開發的一個原則:低耦合,高内聚

耦合:類與類的關系

内聚:就是自己完成某件事情的能力

繼承的特點

  • java中隻支援單繼承,不支援多繼承,即隻能有一個父類
  • java支援多層繼承,即一個子類繼承一個父類,另一個類可以繼承這個子類

繼承的注意事項

  • 子類隻能繼承父類的非私有成員,父類的構造方法不繼承
  • 可以通過super關鍵字通路父類的私有成員和構造方法
  • 不要為了部分功能使用繼承
原因:因為子類繼承了父類的所有非私有成員,注意是所有成員,裡面可能有我們不想用的成員

繼承中成員變量的關系

  • 子類中成員變量和父類成員變量名稱不同的時候,直接使用即可
  • 子類中成員變量和父類成員變量名稱相同的時候,通過this關鍵字和super關鍵字來差別

this關鍵字和super關鍵字的用法和差別

  • this關鍵字:this代表本類對象的引用
  • super關鍵字:代表父類存儲空間的辨別(可以了解為父類引用,可以操作父類的成員)
  • 用法:
    • 調用成員變量
      • this.成員變量 調用本類的成員變量
      • super.成員變量 調用父類的成員變量
    • 調用構造方法
      • this(…) 調用本類的構造方法
      • super(…) 調用父類的構造方法
    • 調用成員方法
      • this.成員方法 調用本類的成員方法
      • super.成員方法 調用父類的成員方法

注意: 不能在類方法(用static修飾的方法)中使用this

原因:靜态方法随着類的加載而加載,成員變量和成員方法随着對象的建立而建立

繼承中構造方法的關系

  • 子類中所有的構造方法都會預設通路父類的無參構造方法

    原因:子類會繼承父類中的資料,還可能會使用父類的資料,是以子類初始化之前一定要先完成父類資料的初始化

    注意:子類的每個構造方法的第一條語句都是super()

  • 父類沒有無參構造方法報錯時的解決辦法
    • 在父類中加一個無參構造方法
    • 通過super關鍵字去顯示調用父類的其他帶參構造方法
    注意:this(…)或者super(…)必須出現在構造方法的第一條語句上

繼承中構造方法的關系

  • 子類中的方法與父類中的方法聲明不一樣,直接調用即可
  • 子類中的方法與父類中的方法聲明一樣時,通過子類對象調用方法的查找使用順序:子類 > 父類

方法重寫與方法重載

  • 方法重寫:子類中出現了和父類中方法聲明一模一樣的方法,也被成為方法覆寫,方法複寫
  • 方法重載:本類中出現的方法命一樣,參數清單不同的方法,與傳回值無關
  • 子類對象調用方法時先找子類本身,再找父類
  • 方法重寫的應用:當子類需要父類的功能,而功能主體子類有自己特有内容時,可以重寫父類中的方法,這樣,既沿襲了父類的功能,又定義了子類特有的内容

方法重寫的注意事項:

1. 父類中的私有方法不能被重寫(因為父類私有方法子類無法繼承)

2.子類重寫父類方法時,通路權限不能更低