方法覆盖中的Java静态变量

标签 java static

<分区>

我有一段代码,我希望其中的输出与实际输出不同。由于静态变量是基于引用的,所以我希望输出是“父类(super class)”,但我得到的是“子类”。代码:

class TestClass {
    public static void main(String args[] ) throws Exception {
        A b = new B(); // Since the reference is A, "superclass" should be the output
        b.test();
    }
}
abstract class A{
    static String a = "superclass";
    abstract void test();
}
class B extends A{
    static String a = "subclass";
    void test(){
        System.out.println(a); // Output subclass
    }
}

请告诉我哪里错了..

最佳答案

静态变量在java中是不被继承的。您的变量 static String a 是静态的,它将它与一个类相关联。 Java 继承不适用于 static 变量。

如果您绝对想要父类(super class)变量,您可以使用:

System.out.println(super.a);

这是您可能希望看到的继承:

abstract class A {
     String a = "superclass";

    abstract void test();
}

class B extends A {
    void test() {
        System.out.println(a); // Output superclass
    }
}

我删除了 static 标识符并删除了子类对变量 a 的实现。如果你运行它,你将得到 superclass 作为输出。

关于方法覆盖中的Java静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49951827/

相关文章:

c# - 在静态类中访问的 HttpContext.Current

java - 静态内部类 - 奇怪

c - 如何创建要在两个 .c 源文件中使用的静态函数?

java - 公共(public)数据库/dao 方法应该是静态的吗?

java - JPQL/HQL : select with OR fails

java - 如果java应用程序关闭,但未靠近框架

java - 动态读取属性文件并在javascript中绘制文本框

java - 为什么 Java 的 InetAddress 类不将 ipv6 地址解析为其 FQDN?

Java 类格式错误 : Method "<error>" class has illegal signature

java - HashMap 上的多个键 : it deletes existing values?