从 superclass 方法访问 sub class 静态属性

Accessing sub class static attributes from superclass method

我将举一个简单的例子,因为从那个角度看并不那么复杂。以下示例的输出将为空:

abstract class SuperClass { // it doesn't need to be abstract but that's my case now
    // needs to be static
    static String var_name = null;
    void method(){
        System.out.println(var_name);
    }
}
class subclass{
    // needs to be static
    static String var_name = "I need to print this"
    void otherUnrelatedMethod(){
        method(); // calling method() here gives me null
    }
}

我知道有两种选择可以实现我想要的:

我只需将 var_name 作为 method() 的参数传递即可轻松实现此目的,这是我现在正在使用的选项。

我也可以覆盖 method(),但是这样做会带来更多的工作,因为有很多子类,而且 method() 实际上非常大。

除了这两个还有别的选择吗?即:如果我可以使用子类类型 <S extends SuperClass> 的边界来获得理想的效果。甚至使用反射,虽然我听说它会使程序很慢

这是解决此类问题的一个很好的模式:

abstract class SuperClass { 
    String var_name() {
        return null;
    }

    void method() {
        System.out.println(this.var_name());
    }
}

class subclass extends SuperClass {
    @Override
    String var_name() {
        return "I need to print this";
    }

    void otherUnrelatedMethod() {
        method(); 
    }
}

  • 首先,superclass没有subclasses的信息。这意味着您不能从 super class.
  • 调用 sub class 函数
  • 其次,static 成员存在于 class 中,而不是在实例中。这是不可能的,但如果一个 sub class 覆盖任何超级 class 静态成员,其他 sub classes 将成为受害者。

你最好使用 returns var_name@Override 子 classes 中的函数。