SCJP(OCPJP) 考古題解析 第31題

Given:

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


答案:


解析:

標記為 final 的屬性雖然不可以做二次修改

但是繼承時依然可以被override



因 FOO 為  static

所以可直接使用 Base.FOO 以及 Sub.FOO 調用變數



在 line 10 時

做了將 s 轉型為父類型態

所以在調用變數時,會採用父類變數

就會印出 foo



0 意見:

張貼留言