以下是示例程序:
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
?
答案 0 :(得分:3)
静态变量不是继承的,它们属于类,这就是 static 的原因。但是,子类可以具有相同的静态字段。