首先,允許多層繼承但不允許多重繼承(一繼多) 子類本質上是包含了父類的,下面這張圖片從內存的角度解釋了這一點 值得一提的是構造它們的時候走構造函數的順序: 在構造子類對象的時候要先構造出一個父類對象,也就是說,先執行父類的無參構造或者系統幫忙添加的無參構造,再走子類的構造。 假如父類沒有無參構造卻有有參構造,系統不會幫忙添加了無參版本了,也就會報錯,這時候子類可以通過super去顯式調用父類有參版本的構造。
多態涉及的訪問規則看似很復雜,但總結起來就是:一個子類“被當作父類”使用時就只能訪問父類有的成員和方法,其中被重寫覆蓋的方法用覆蓋后的版本,注意靜態方法不會被覆蓋。向下轉型之后就是一個普通類。
抽象的繼承,規則本身沒有什么好說的,那就是有一些共性被抽象提煉出來了,作為抽象的方法或者類,一層層繼承下來我們可以任意給它具體化。 接口(interface)是一種特殊的抽象類(abstract class),區別在于:接口限定的更死,只有常量和抽象方法;接口跟它的子類是實現(implement)的關系,也是特殊的繼承(extends)。 允許:1.接口繼承接口的多層繼承和繼承多個接口的多重繼承 2.同時繼承類和多個口
嵌套在類中(方法外),本質是成員(所以可以static),所以它訪問外部類成員就像其他普通成員一樣平等。外部類訪問內部類對象得先創造出它的對象。
嵌套在方法中,只能訪問局部的final變量。 原因在于局部變量會隨著方法調用完畢而消失,但內部類還在堆中暫時未被回收。加上final以后,內部類中變量的調用就會被替換為常量,否則到了回收內部類的時候就找不到這個變量。
新聞熱點
疑難解答