java - 通过静态方法的静态成员

标签 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);       // <- foo
        System.out.print(Sub.FOO);        // <- bar
        System.out.print(b.FOO);          // <- foo
        System.out.print(s.FOO);          // <- bar
        System.out.print(((Base)s).FOO);  // <- foo
    } 
}

class Sub extends Base {
    public static final String FOO="bar";
  }

我的疑问是,在第 8 行和第 9 行中,我们使用引用变量来访问类的静态成员......这可能吗?因为静态成员只能通过类名访问...请纠正我哪里错了?

最佳答案

我选择选项D。

静态成员在编译时使用声明类型而不是实际类型进行解析。

这就是为什么 ((Base)s).FOO) 引用 Base.FOO - 即使该对象是 Sub

这种情况也会发生,并且在下面有更好的说明:

Base b = new Sub(); // valid
System.out.print(b.FOO); // foo

这里 b.FOO 由于声明类型而引用 Base.FOO,即使该实例是 Sub

关于java - 通过静态方法的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18875500/

相关文章:

java - 查找字符串中存在的字符 :java

java - Android Oracle 数据库 JDBC6

java - 同步传入的ArrayList

java - Java和Matlab的图像处理结果不同

java - ArrayList.clear() 正在更新 List<> 的先前值

java - 通过链接表获取具有属性的映射的大小

java - 在 spring-boot 测试中使用属性文件

java - java中的具体类是什么

java - 如何从字符串数组创建 InputStream

java - 为什么 SSL 握手给出 'Could not generate DH keypair' 异常?