重用超类静态字段

m0s*_*it0 3 java inheritance static

我有这个班级声明

abstract class  A {
    protected static String message = "Hello";
}
Run Code Online (Sandbox Code Playgroud)

我希望这个字段传播到子类,以避免protected static String message = "Whatever";在所有子类中键入(每个子类中此静态字段的值不同).

我知道这不起作用:

class B extends A {

    static {
        message = "Blablabla";
    }
}
Run Code Online (Sandbox Code Playgroud)

因为它实际上会修改A,message因为静态字段/方法不会被继承.我想知道的是,是否还有其他方法可以做到这一点,或者我是否必须重写每个子类上的静态字段.

fla*_*ash 5

我建议使用受每个子类而不是静态字段覆盖的受保护方法getMessage().

class B extends A {
    @Override
    protected String getMessage() {
        return "Blablabla";
    }
}
Run Code Online (Sandbox Code Playgroud)