重用超类静态字段

时间:2012-08-27 10:49:21

标签: java inheritance static

我有这个类声明

abstract class  A {
    protected static String message = "Hello";
}

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

我知道这不起作用:

class B extends A {

    static {
        message = "Blablabla";
    }
}

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

5 个答案:

答案 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的方法配置/管理返回值。 ......在每个子类中复制相同的锅炉板“私有静态......”仍然会有更多的工作。