Java基礎(二)重寫、繼承(函式,建構函式、變數的繼承過程)、抽象。
Java不支援多繼承,因為容易帶來安全隱患,當多個父類中定義了相同功能,但功能內容不同時,子類物件不確定要執行哪一 個。
繼承是底層不斷向上抽取共性而來的。在具體呼叫時,要建立最子類的物件(更多的功能,包括共有的和特有的)。
載入子類檔案時候,先載入父.class,再載入子.class。
類中成員:一、函式,二、變數,三、建構函式。
重寫(覆蓋):子類和父類有一模一樣的函式時,當子類物件呼叫函式時,會執行子類函式內容,如同父類函式被覆蓋一樣。子類 覆蓋父類,必須保證子類許可權大於等於父類許可權,否則編譯失敗。靜態只能覆蓋靜態。
加final關鍵字限制重寫。
建構函式沒有覆蓋。
子類建構函式第一行有一條隱式的super();語句,會訪問父類中空引數的建構函式,而且子類中所有的建構函式預設第一行都是super();建構函式裡面要麼有this()要麼有super()。
父類的資料子類可以直接獲取,子類物件在建立時,需要檢視父類是如何對這些資料初始化的。
子類在物件初始化時,要先訪問父類中的建構函式。
子類的所有建構函式,預設都會訪問父類中空引數的建構函式。因為子類每一個建構函式內的第一行都有一句隱式super()。
當父類中沒有空引數的建構函式時,子類必須手動通過super或者this語句形式來指定要訪問的建構函式。
子類建構函式第一行也可以手動指定this語句來訪問本類中的建構函式,子類中至少會有一個建構函式會訪問父類中的建構函式
如果要訪問父類中指定的建構函式,可以通過手動定義super語句的方式指定。
例:class zi extends Fu {
zi(){
super(); //預設方式。
super(4); //手動指定方式。
}
}
子類一旦例項化就會走父類。
子類調動父類函式時,呼叫建構函式super(),呼叫一般函式super. 。
————————————————————————————————————————————————————————
抽象方法一定存放在抽象類中,抽象類不可以建立物件(抽象類不可以例項化),因為呼叫抽象方法沒有意義。
抽象類中的抽象方法要被使用,必須由子類複寫其所有抽象方法後,建立子類物件呼叫(如果子類只覆蓋了部分抽象方法那麼該子類還是一個抽象類)。
抽象可以強迫子類去重寫抽象方法。
抽象函式也是一類事物當中應該具備的功能,只不過功能主體(這類事物的)具體子類實現方式不一樣。