1

考虑以下类层次结构:

基础 <-- 派生1

基础 <-- 派生2

Base 有一个静态字段。我希望派生类继承该静态字段,但每个类都应具有该静态字段的自己的“实例”(通过实例,我的意思是有多个具有相同名称的静态字段)。所以这Derived1.staticFieldDerived2.staticField.How 不同?我该怎么做?

我希望你能理解我的问题。告诉我您是否希望某些代码支持我的解释。

public class Base
{
    protected static String staticField = "Base";

    protected void printIt()
    {
        System.out.println(staticField);
    }
}

public class Derived1 extends Base
{
    //Override somehow
    protected static staticField = "Derived1";
}

public class Dervied2 extends Base
{
    //Override somehow
    protected static staticField = "Derived2";
}

instanceOfBase.printIt()打印“基地”

instanceOfDerived1.printIt()打印“派生1”

instanceOfDerived2.printIt()打印“Derived2”

4

4 回答 4

2

静态方法/字段绑定到类型,因此与实例无关。

您可以将相同的静态字段添加到您的子类,但请注意这不是多态性 - 这只是隐藏。这符合静态方法不能被子类覆盖的行为。

我建议为您的解决方案尝试更好的方法;覆盖的静态字段不会为您购买多态性。

于 2013-06-09T07:38:12.900 回答
1

您不能这样做,因为静态成员并没有真正继承。继承与仅与实例相关的多态性一起出现。我认为您应该更好地解释您的实际问题,我相信我们可以建议您选择更好的设计解决方案。

于 2013-06-09T07:40:56.127 回答
1

你不能继承任何静态的东西。它属于类型/类,而不是实例。继承可以被认为是将非私有字段/方法从父类复制到扩展它的类。

于 2013-06-09T07:43:11.900 回答
1

您可以将“静态字段”视为一个全局变量,它甚至不是 Class 的一部分。使 Derived1.staticField 与 Derived2.staticField 不同是不可能的,因为这是静态字段的设计方式。

于 2013-06-09T07:48:43.460 回答