我有这个类声明
abstract class A {
protected static String message = "Hello";
}
我希望这个字段传播到子类,以避免在所有子类中键入protected static String message = "Whatever";
(每个子类中此静态字段的值不同)。
我知道这不起作用:
class B extends A {
static {
message = "Blablabla";
}
}
因为它实际上会修改A
的{{1}},因为静态字段/方法不会被继承。我想知道的是,是否还有其他方法可以做到这一点,或者我是否必须重写每个子类上的静态字段。
答案 0 :(得分:5)
我建议使用受每个子类而不是静态字段覆盖的受保护方法getMessage()。
class B extends A {
@Override
protected String getMessage() {
return "Blablabla";
}
}
答案 1 :(得分:1)
在这种情况下,我通常会创建一个get方法:
abstract class A {
private static final String DEFAULT_MESSAGE = "Hello";
protected String getMessage() {
return DEFAULT_MESSAGE;
}
}
这样可以轻松覆盖我想要的子类中的消息。
答案 2 :(得分:1)
没有直接的方法可以做到。
您可以考虑使用一些将Class对象映射到消息的实用程序类。这将帮助您使用常规方法处理基于this.getClass()
的消息。
答案 3 :(得分:0)
静态字段和方法是继承 - 作为一名C程序员,我被告知将它们视为类似于“全局”变量,命名为类(以及私有/受保护限制)
从您的第一个代码段开始,B.message
将为“Hello”。
你必须要做到
public class A {
protected String message = "Hello";
}
或
public class A {
private static String message = "Hello";
}
public class B {
private static String message = "Howdy";
}
答案 4 :(得分:0)
一个方面会让你实现你想做的事吗?从一个地方,您可以逐个类地为具有特定nam的方法配置/管理返回值。 ......在每个子类中复制相同的锅炉板“私有静态......”仍然会有更多的工作。