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 |