1. 程式人生 > >java 關於繼承的一些注意

java 關於繼承的一些注意

1、對於一個引用型別的變數,java編譯器按照它宣告的型別來進行編譯。比如;parent  p=new child();此時p在編譯時這p變數被人為只有parent的方法和變數,雖然它引用的是一個子類的物件。

2、子類與父類是即是原則,子類即父類。所有能應用父類的地方,都能換成子類,但反過來是不成立的。所以,一個類的例項包括其本身的累的例項,也包括其實子類或間接子類的例項。

3、第一條說道是在編譯期,那麼在執行期;parent  p=new child();這句話又會怎麼解釋呢?執行期是按照實際引用的變數來處理的。比如:parent p=new parent();child c=(child)p;父類的向子類的向下轉型,編譯期可以通過,但執行時則報型別轉換失敗。

4、我們知道一般我們都是parent  p=new child();這麼寫的。那麼問題來了,他們的方法和變數是怎麼繫結的呢?我們又怎麼知道它是呼叫誰的方法或成員變數呢。

  例項方法與引用變數的實際引用物件繫結。是動態繫結,jvm決定。

  靜態方法和成員變數(包括靜態變數和例項變數)與引用變數宣告的型別繫結。均是靜態繫結,在編譯階段就決定關了的。

(執行時,當子類的例項去呼叫一系列的例項方法時(包括一個方法呼叫另一個方法)將優先和其本類方法繫結,若沒有定義才會與其父類的方法繫結)

5、繼承的利弊。

利:是一種提高程式程式碼的可重用性,以及提高系統的可擴充套件性的有效手段。

弊:繼承樹不能太複雜,太複雜程式將可讀性差,同樣會給jvm的方法動態繫結帶來複雜度;影響系統的可擴充套件性。

     父子類將會高耦合。

     打破了封裝

所以對於建議多使用組合方式。

6、父類的例項方法可以被子類覆蓋為抽象方法