首頁 > 專家說

關于JAVA的this關鍵字

來源:新能源網(wǎng)
時間:2024-08-17 13:22:55
熱度:

關于JAVA的this關鍵字【專家解說】:1.this表示的是指向一個實例嗎。如果不是指向一個實例,那么為什么this可以參與instanceof運算或當作引用參數(shù)傳進方法里,su

【專家解說】:

1.this表示的是指向一個實例嗎。如果不是指向一個實例,那么為什么this可以參與instanceof運算或當作引用參數(shù)傳進方法里,super為什么不能?
-- this表示的是指向一個實例。 System.out.println(s instanceof SubT3);//false 這個地方之所以返回false 是因為 s的類型是 SuperT3 所以 “s instanceof SubT3” 是返回false

2.如果this表示當前對象,那么我在第4行new的SubT3的實例,在第14行為什么沒有打印出peter呢。
--首先說this的類型是SubT3 這是確定的,所以this instanceof SuperT3 和 this instanceof SubT3都是true. 第14行打印出Jack是正確的。要從內(nèi)存結構看,子類是無法覆蓋父類的成員變量的,所以對于SubT3 來說里面有兩個 name, 一個是Jack 一個是peter。那么究竟是調(diào)用哪個name呢?是調(diào)用基類的name,因為成員變量是不能重載的,也就是說 調(diào)用成員變量的函數(shù)在基類中 則使用基類的成員變量 調(diào)用成員變量的函數(shù)在子類中則使用子類中的成員變量。 如果想要 輸出peter,只需要在SubT3 重載func 也就是將func的代碼復制在SubT3中 就會輸出peter. 記?。撼蓡T變量是不會被重載的 只有 函數(shù)會被重載。

3.如果在第14行時,this只表示SuperT3的引用(我也不知道到底引用什么),那為什么第16行沒有打印出與第6行相同的結果呢?
--看第2條的回答 this不是superT3 是 subT3 只是因為成員變量是無法重載的 依賴于調(diào)用它的函數(shù)所在類。

另外說明一下,如果基類的成員變量可以被同名的子類中成員變量替換,那會產(chǎn)生災難的后果。比如基類中有個數(shù)組 里面存儲了一些 標識 比如 0 1 2 而在子類中 聲明了同樣一個名字的數(shù)組 里面是 3 4 5 那么基類運行到基類的方法的時候 本來處理 0 1 2 現(xiàn)在卻處理 3 4 5 會產(chǎn)生不可預知的結果。如果想改變基類的行為 重載他的函數(shù) 重新定義新的行為。

希望能幫到你