public class Base { public static final String FOO = "foo"; public static void main(String[] args) { Base b = new Base(); Sub s = new Sub(); System.out.print(Base.FOO); System.out.print(Sub.FOO); System.out.print(b.FOO); System.out.print(s.FOO); System.out.print(((Base) s).FOO); } } 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
解析:
標記為 final 的屬性雖然不可以做二次修改
但是繼承時依然可以被override
因 FOO 為 static
所以可直接使用 Base.FOO 以及 Sub.FOO 調用變數
在 line 10 時
做了將 s 轉型為父類型態
所以在調用變數時,會採用父類變數
就會印出 foo
0 意見:
張貼留言