1. 程式人生 > >關於子類和父類之間的方法,構造方法呼叫關係

關於子類和父類之間的方法,構造方法呼叫關係

子類繼承了父類之後,父類的所有方法都可以被子類呼叫,父類的所有(除私有外)方法都可以被重寫;

但是父類中私有資料域不能在子類中被修改,只能通過呼叫父類的公共修改方法來修改;

例如下面圓幾何繼承了簡單幾何:

以上幾點說明:

簡單幾何類中的構造方法其實不需要寫,因為就算其他類想設定簡單幾何類的私有資料域,可以通過setget方法來獲得,所以完全是多餘的;

(子類繼承也叫做拓展,顧名思義,拓展那些在父類中資料域和方法,子類在父類本身的基礎上,還能夠再新增自己的多樣性,添加了自己的方法和資料域)

圓幾何類拓展了簡單幾何類,除了設定自己的資料域半徑,還可以通過呼叫set方法引用父類的私有資料域,這樣就對父類的拓展;除了資料域拓展,圓幾何類還拓展了求圓面積的方法;(可拓展資料域和方法

那如何使用這個子類物件呢?

由上可知:繼承了父類的圓幾何類物件,能呼叫父類(除了private修飾的方法,只能在父類中呼叫)和子類中的方法;

一個父類能被多個子類繼承,一個子類只能繼承一個父類,想多重繼承可通過介面實現;

構造方法鏈:

構造方法時注意:若A繼承了B,而A中沒有自己的構造方法(管這叫做顯示定義構造方法),則會隱式呼叫B中的無參構造(編譯器會自動新增super語句),若B中只有有參構造方法,就不會自動新增無參構造方法,會導致編譯錯誤,所以每一個類中最好帶一個無參構造方法,但是如果忘記寫構造方法,會自動寫一個空的無參構造方法;如下所示:

下面是構造方法鏈示例:

也就是說當A繼承了B,B繼承了C。A中new了一個物件,則先會呼叫A中的無參構造;而A是B的子類,A所有的構造方法執行之前,B中的無參構造方法要先執行;又因為B是C的子類,B所有的構造方法執行之前,C中的無參構造方法要先執行;