看板 java 關於我們 聯絡資訊
不好意思來這裡問這麼基本的問題, 還請高手幫小妹解惑 在看 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
mars90226:的確會是兩個不一樣的變數,但是你存取的時候會拿到目前 07/27 15:47
susaku:借此題想問為什麼答案不是B @@? 07/27 15:48
mars90226:類型有的變數 但是可以用關鍵字來取得父類別的變數 07/27 15:49
ayumi001:最後一個已經被轉型成Base的型別了 所以是呼叫Base的FOO 07/27 15:57
tomoyaken14:兩個FOO是不同的東西,這題主要是考繼承與多形 07/27 19:20
AI3767:如果沒記錯的話, 這個不是改寫, 而是shadowed 07/27 20:23
peacedove:java裡面繼承class的field是新增的 跟method的繼承不一 07/28 03:25
ymca9056020:在child class override parent class 的 final類的 08/03 00:18
ymca9056020:對不起回錯嚕 這的確可稱做 shadow 您可以google 一下 08/03 00:26