[問題] 請問final可以被改寫嗎??

看板java作者 (小捲)時間12年前 (2011/07/27 14:51), 編輯推噓6(603)
留言9則, 7人參與, 最新討論串1/2 (看更多)
不好意思來這裡問這麼基本的問題, 還請高手幫小妹解惑 在看 SCJP 的練習題時, 有一題是: 1. public class Base{ 2. public static final String FOO = "foo"; 3. public static void main(String[] args){ 4. Base b = new Base(); 5. Sub s = new Sub(); 6. System.out.print(Base.FOO); 7. System.out.print(Sub.FOO); 8. System.out.print(b.FOO); 9. System.out.print(s.FOO); 10. System.out.print(((Base)s).FOO); 11. } 12. } 13. class Sub extends Base{public static final String FOO = "bar";} What is the result? A. foofoofoofoofoo B. foobarfoobarbar C. foobarfoofoofoo D. foobarfoobarfoo E. barbarbarbarbar F. foofoofoobarbar G. foofoofoobarfoo 這一題的答案是D, 為什麼不是A?? final 不是不允許改寫嗎 >< ?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.92.133

07/27 15:47, , 1F
的確會是兩個不一樣的變數,但是你存取的時候會拿到目前
07/27 15:47, 1F

07/27 15:48, , 2F
借此題想問為什麼答案不是B @@?
07/27 15:48, 2F

07/27 15:49, , 3F
類型有的變數 但是可以用關鍵字來取得父類別的變數
07/27 15:49, 3F

07/27 15:57, , 4F
最後一個已經被轉型成Base的型別了 所以是呼叫Base的FOO
07/27 15:57, 4F

07/27 19:20, , 5F
兩個FOO是不同的東西,這題主要是考繼承與多形
07/27 19:20, 5F

07/27 20:23, , 6F
如果沒記錯的話, 這個不是改寫, 而是shadowed
07/27 20:23, 6F

07/28 03:25, , 7F
java裡面繼承class的field是新增的 跟method的繼承不一
07/28 03:25, 7F

08/03 00:18, , 8F
在child class override parent class 的 final類的
08/03 00:18, 8F

08/03 00:26, , 9F
對不起回錯嚕 這的確可稱做 shadow 您可以google 一下
08/03 00:26, 9F
文章代碼(AID): #1EBxLePW (java)
文章代碼(AID): #1EBxLePW (java)