super關鍵字

要說super就先要說this。
"this",作爲一個特殊的關鍵字,它的規則如下:
1。可以表示構造函數傳遞。this(a,b)表示調用另外一個構造函數。這裏面的this就是一個特殊語法,不是變量,沒有什麼類型。
2。可以在一個類的非static成員內部使用,表示當前這個對象。此時,this就是一個final的普通變量,它有靜態類型,就是這個類C本身;它有動態類型,就是當前這個對象的類型。你可以對它調用成員函數,把它傳遞給別的函數,等等等等。只要一個C類型的final變量可以出現的地方,它就可以出現。

"super"。它和"this"類似,但是也有不同的地方。
1。表示調用父類的構造函數。也是一個特殊語法,不是變量,沒有什麼類型。

2。可以在一個類的非static成員內部使用。比如super.method()。
但是,注意,這個super.method()只是長得跟some_var.method()一樣,一個語法糖而已。實質上,"super"根本不是一個變量。

爲什麼不是?因爲如果是就壞了。java裏面有一個金科玉律:任何public非static函數的調用都是多態的。
所以,如果super是個變量,也指向當前對象,那麼,不管super的靜態類型是什麼super.method()必然調用的是子類的那個版本,而不會是我們期望的,靜態地選擇父類的那個版本。

所以,你只要把super.xxx看成一個特殊的語法,比如理解爲“super::xxx”就好了。

既然super不是一個變量,那麼不能把它象一個普通變量那樣"==",或者傳遞給某個函數就看起來很正常了,是麼?何況,你其實也用不着它,有this你這些要求就都可以辦到了。

3。super的另外一個作用是調用父類的protected函數。只有通過"super"這個魔咒,我們才能操作父類的protected成員,別無它法。
發佈了28 篇原創文章 · 獲贊 2 · 訪問量 5601
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章