作者minnie823 (小捲)
看板java
標題[問題] 請問final可以被改寫嗎??
時間Wed Jul 27 14:51:18 2011
不好意思來這裡問這麼基本的問題, 還請高手幫小妹解惑
在看 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