1. 程式人生 > >24 《Java程式設計》第六週學習總結

24 《Java程式設計》第六週學習總結

教材學習內容總結

第六週學習了第五章的內容

  • 5.1 子類與父類

繼承是一種用已有的類創新新類的機制,由繼承而得到的類稱為子類,被繼承的類稱為父類。

Java不支援多重繼承,即一個子類只能由一個父類。

  • 5.1.1宣告子類

使用關鍵字extends來定義一個類的子類。格式:class 子類名 extends 父類名 {.....};

  • 5.1.2類的樹形結構

Object 類是所有類的祖先類,任何類都是Object類的子孫類。每個類(除了Object類)有且僅有一個父類,一個類可有多個或者零個子類。如果類的宣告(除了Object 類)沒有使用extends關鍵字,此類預設為Object類的子類。

  • 5.2子類的繼承性

類有兩種重要的成員:成員變數和方法。一部分的成員是子類自己定義的,另一部分由繼承而來。

  • 5.2.1子類和父類在同一個包中的繼承性

如果子類和父類在同一個包中,子類自然地繼承了其父類不是private的成員變數和方法,其繼承的成員變數或方法的訪問許可權不變(即同一個包中子類可訪問父類中protected、public的或者友好的成員變數和方法。

  • 5.2.2子類和父類不在同一個包中的繼承性

當不在同一個包中時。子類不會繼承父類中的private和友好的成員變數和方法,只繼承public和protected的成員變數和方法。

  • 5.2.3繼承關係的UML圖

實線起始端是子類的,終點端是父類的,但終點端使用一個空心三角形來表示實線結束。

  • 5.3子類與物件
  • 5.3.1子類物件的特點

子類建立物件時,子類的構造方法先呼叫父類的構造方法,再到組合物件的所屬類的構造方法,最後呼叫子類自己的構造方法。

子類只能操作繼承的那部分成員變數。

  • 5.3.2關於instanceof運算子

instanceof是雙目運算子,左面的操作元是物件,右面是類;運算結果是ture或false。

  • 5.4成員變數的隱藏和方法重寫
  • 5.4.1成員變數的隱藏

子類中宣告的成員變數和父類中宣告的成員變數同名時,子類就隱藏了繼承的成員變數。

子類操作這個同名的成員變數時,操作的是子類重新宣告的那個,而不是隱藏的那個成員變數。

  • 5.4.2方法重寫

子類可通過方法重寫隱藏繼承的方法。

1.重寫的語法規則

(1)子類繼承父類的例項方法,就有權利重寫此方法。

(2)方法重寫是指:子類定義一個方法,此方法的型別與父類一致或是父類方法的型別的子型別,且這個方法的名字、引數個數、引數型別與父類完全相同。

2.重寫的目的:可以隱藏子類從父類中繼承的方法,子類通過方法重寫把父類的狀態和行為改為自身的狀態和行為。

3.重寫後方法是呼叫:若重寫的方法,則呼叫子類重寫的方法;若未重寫,則呼叫繼承的方法。

注:重寫方法時不允許降低訪問許可權,但可以提高訪問許可權(訪問許可權的高低:public、protected、友好、private)。

  • 5.5super關鍵字
  • 5.5.1用super操作被隱藏的成員變數和方法

若子類想使用被子類隱藏的成員變數和方法,使用super關鍵字,如super.x  ,super.play();

  • 5.5.2用super呼叫父類的構造方法

​​​​​​​子類不繼承父類的構造方法,子類想使用父類的構造方法,必須在子類的構造方法中使用,且使用super關鍵字,而且super必須是子類構造方法中的頭一條語句。

  • 5.6final關鍵字

​​​​​​​1.final類不能被繼承,即不能有子類。

2.用final修飾父類的一個方法,則給方法不允許被重寫。

3.成員變數或區域性變數被修飾為final,則為常量,必須在宣告中指定常量的值,因常量無預設值。

  • ​​​​​​​5.7物件的上轉型物件​​​​​​​

子類物件;

父類物件;

父類物件=(賦值)子類物件;→物件的上轉型物件

1.上轉型物件不能操作子類新增的成員變數,不能呼叫子類新增的方法。

2.上轉型物件可以訪問子類繼承或隱藏的成員變數,或呼叫子類繼承的方法和重寫的方法。

3.如果子類重寫父類某例項方法,上轉型物件呼叫該方法時一定是呼叫子類重寫的方法。

注:不可將父類建立的物件的引用賦給子類物件。若子類物件重寫了父類的靜態方法,上轉型物件只能呼叫父類的靜態方法而不是子類重寫的靜態方法。

  • 5.8繼承與多型

​​​​​​​多型性:指父類某個方法被其子類重寫時,可各自產生自己的功能行為(通過上轉型物件)。

  • 5.9abstract類和abstract方法。

​​​​​​​1.abstract方法只允許宣告,不允許實現(即無方法體),不允許用final和abstract同時修飾一個方法或類,不允許使用static修飾abstract方法,即abstract方法必須是例項方法。

2.(1)abstract類可以有多個abstract方法,也可以有非abstract方法。

(2)abstract類不能用new運算子建立物件,只能由其子類建立。

(3)非abstract類是abstract類的子類,必須重寫父類的abstract方法,即去掉abstract方法的abstract修飾,給出方法體;

abstract類是abstract類的子類,可以重寫方法也可以繼承父類的abstract方法。

  • 5.10面向抽象程式設計

​​​​​​​目的:為了應對使用者需求的變化,將某個類中經常因需求變化而需要改動的程式碼從該類中分離出去。

核心:讓類中每種可能的變化對應地交給抽象類的一個子類去負責,從而讓該類的設計者不去關心具體實現,避免所設計的類依賴於具體的實現。

  • 5.11開-閉原則

​​​​​​​對擴充套件開放,對修改關閉。

教材學習中的問題和解決過程

程式碼除錯中的問題和解決過程

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標
第一週 17 1 12

第二週

20 1 10
第三週 27 1 5
第五週 50 1 5
第六週 37 1 5

參考資料