公共静态最终字符串变量是否可以在子类中重写?

时间:2015-09-24 14:34:38

标签: java

以下是示例程序:

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";
}

当我执行此操作时,它会打印foobarfoobarfoo

由于String FOO被声明为public static final,我的理解是它的值不能再被更改了。但是在子类Sub中,值将更改为bar

程序是否应该抛出编译错误? 为什么打印foobarfoobarfoo

1 个答案:

答案 0 :(得分:3)

静态变量不是继承的,它们属于类,这就是 static 的原因。但是,子类可以具有相同的静态字段。