JAVA第六週學習總結
201711671102 曾燃亮 《java程式設計》第6周學習總結
教材學習內容總結
第五章 子類與繼承
一.子類與父類
繼承是一種由已有的類建立新類的機制。定義一個共有屬性的一般類(父類),再定義一個具有特殊屬性的子類,子類繼承一般類的屬性和行為。java不支援多重繼承,所以子類只有一個父類。
1.子類
class 子類名 extends 父類名{
。。。}
2.類的樹形結構
Object是所有類的祖先類。如果一個類(除了Object類)的宣告中沒有使用extends關鍵字,這個類被系統預設為是Object的子類,即類宣告“class A”=“class A extends Object”。
二.子類的繼承性
類的重要成員:成員變數和方法。
繼承中不可以降低訪問許可權
高-->低
public protected 友好的 private
1.子類和父類在同一包中的繼承性
同一個包中,子類繼承父類中不是private的成員變數和方法,訪問許可權不變。
2.子類和父類不在同一個包
父類private和友好的不會被子類訪問,也就是說不可繼承private和友好的成員變數和方法
三.子類與物件
1.子類物件的特點
子類中海油一部分方法是從父類繼承的,這部分方法可以訪問父類中private的成員變數(間接訪問)
2.instanceof運算子
當左邊的物件是右邊的類或者子類建立的物件時,instanceof運算的結果是true,否則是false
四.成員變數的隱藏和方法重寫
當子類所宣告的成員變數的名字和父類繼承的一樣時(宣告型別可以不同),子類會隱藏所繼承的成員變數。
1)子類物件以及子類自己定義的方法操作與父類同名的成員變數是指子類重新宣告的成員變數
2)子類繼承的方法所操作的成員變數一定是被子類繼承或者隱藏的成員變數
2.方法重寫
子類定義的方法一定是方法型別和父類一樣或者是父類方法型別的子型別,並且這個方法名字、引數個數、引數的型別和父類完全相同。
重寫目的:為了隱藏繼承的方法
重寫方法無法操作被子類隱藏的成員變數和方法。除非用super關鍵字。
重寫的方法的型別可以是父類方法型別的子型別,即不必完全一致
五.super關鍵字
1.用super操作被隱藏的成員變數和方法
P122
注:當super呼叫被隱藏的方法時,該方法中出現的成員變數是被子類隱藏的成員變數或者繼承的成員變數
2.使用super呼叫父類的構造方法
子類不繼承父類的構造方法。因此要用super來呼叫父類的構造方法,而且super必須是子類構造方法中的頭一條語句。
如果子類中沒有明顯寫出super關鍵字來呼叫某個構造方法,那麼預設有:super();這個是呼叫無參的構造方法
例子P124(你會看明白的)
當父類定義了其他的構造方法時java不提供預設的構造方法,所以 一定要寫一個無參的構造方法,以防止省略super時出現錯誤。
六.final關鍵字
final關鍵字可以修飾類,成員變數和方法中的區域性變數
1.final類
final類不能被繼承,即不能有子類。
final class A{
。。。}
2.final方法
如果用final修飾一個父類的方法,那麼這個方法不能被重寫
3.常量
如果成員變數或者區域性變數被修飾為final,那他就是常量。常量宣告時沒有預設值,所以一定要給值
七.物件的上轉型物件
把子類的物件的引用放到父類物件中
1)上轉型物件不能操作子類新增的成員變數,不能呼叫新增的方法
2)上轉型物件可以訪問子類繼承或隱藏的成員變數,也可以呼叫子類繼承的方法或者重寫的例項方法。
如果子類重寫了父類的例項方法,當物件的上轉型物件呼叫這個例項方法時一定是呼叫了子類重寫的例項方法。
八.繼承與多型
多型是指父類的某個方法被子類重寫時,可以各自產生自己的功能行為。
九.abstract類和abstract方法(抽象類和抽象方法)
abstract class A{
。。。}
對於abstract方法只允許宣告不可以實現,而且不可以用final和abstract修飾同一個方法。也不可以用static修飾abstract方法,即abstract方法必須是例項方法。
1)abstract類中可以有abstract方法也可以有非abstract方法,普通類不可以有abstract方法。
2)abstract類不可以用new運算子建立物件
3)abstract類的子類可以是abstract類
4)abstract類的物件可以作為上轉型物件
十.面向抽象程式設計
目的:應對使用者需求的變化
核心:讓類中每種可能的變化對應地交給抽象類的一個子類去負責,從而讓該類的設計者不去關心具體實現,避免所設計的類依賴於具體的實現
十一.開-閉原則
教材學習中的問題和解決過程
loading。。。。。
程式碼除錯中的問題和解決過程
loading。。。。。
感悟
java的繼承和c++的繼承不太一樣
目標:5000行
第一週:35行
第二週:70行
第三、四周:200行
第五週:640行
第六週:150行