日常小記(5):子類與繼承
不可以用 final、static、abstract 修飾構(gòu)造方法。
如果在子類的構(gòu)造方法中沒有顯式地寫出 super 關(guān)鍵字來調(diào)用父類地某個構(gòu)造方法,那么編譯器默認(rèn)有 “super();” 調(diào)用父類的無參數(shù)構(gòu)造方法,如果父類沒有這樣的構(gòu)造方法,代碼將出現(xiàn)編譯錯誤。
不可以用 final 和 abstract 同時修飾同一個方法
如果一個類的所有構(gòu)造方法都的訪問權(quán)限都是 private ,意味著這個類不能有子類,理由是一個類的 private 方法不能在其他類中被使用,但子類的構(gòu)造方法中一定會調(diào)用父類的某個構(gòu)造方法。
局部變量只在定義它的內(nèi)部有效,并且不能使用 private?,protected,public 修飾符進(jìn)行修飾,當(dāng)局部變量所在的方法調(diào)用結(jié)束后,java 虛擬機(jī)將自動釋放局部變量所占用的資源。

重寫:子類繼承父類后,定義了一個和父類一模一樣方法,方法名和參數(shù)的定義相同。這時候子類要實現(xiàn)這個方法,就稱為對父類方法的重寫(覆蓋)。
重載:子類繼承父類后,定義了一個和父類中名字相同的方法,但是參數(shù)不一樣(必須),實現(xiàn)也不同(可選),這就是重載。
靜態(tài)方法:java中,static修飾符修飾的方法就是靜態(tài)方法。所謂靜態(tài)就是指:在編譯之后所分配的內(nèi)存會一直存在(不會被回收),直到程序退出內(nèi)存才會釋放這個空間。
靜態(tài)方法不能被重寫,但是可以重載。
子類不能重寫父類的靜態(tài)方法。
java子類可以繼承父類除了private屬性(私有屬性)以外所有的屬性變量。子類繼承父類時,需要注意以下三點:
在子類繼承父類的時候,子類必須調(diào)用父類的構(gòu)造函數(shù)。
如果父類有默認(rèn)構(gòu)造函數(shù),子類實例化時自動調(diào)用,但如果父類沒有默認(rèn)構(gòu)造函數(shù),即無形參構(gòu)造函數(shù),子類構(gòu)造函數(shù)必須通過super調(diào)用父類的構(gòu)造函數(shù)。
在java的繼承當(dāng)中子類是不可以繼承父類的構(gòu)造函數(shù),只能調(diào)用父類的構(gòu)造函數(shù)。

abstract類 中可以有 abstract類,也可以有 非abstract類。
abstract類 的子類可以是 abstract類,也可以是 非abstrac類。
static 不能修飾 abstract 方法:
java中抽象類中的抽象方法不可以使用static 構(gòu)成靜態(tài)抽象方法,抽象類是不能實例化的,即不能被分配內(nèi)存;而static修飾的方法在類實例化之前就已經(jīng)別分配了內(nèi)存,這樣一來矛盾就出現(xiàn)了:抽象類不能被分配內(nèi)存,而static方法必須被分配內(nèi)存。所以抽象類中不能有靜態(tài)的抽象方法。
另外,定義抽象方法的目的是重寫此方法,但如果定義成靜態(tài)方法就不能被重寫。

final 修飾符(最終):
不能派生子類(不能繼承)
final?變量,其值不能在程序運行過程中改變,是常量(變量為常量)
final 方法,不能被子類重寫(子類不能重寫)

上轉(zhuǎn)型對象:
不能訪問子類新增的成員變量,不能調(diào)用子類新增的方法(新增不能用)
可以訪問子類 繼承 或 隱藏 的成員變量,也可以調(diào)用子類 繼承的方法 或 重寫的實例方法