通过从基类派生来继承静态字段的新“实例”

时间:2013-06-09 07:36:00

标签: java oop

考虑以下类层次结构:

Base< - Derived1

基础< - Derived2

Base有一个静态字段。 我希望派生类继承该静态字段,但每个类应该有自己的'实例'(例如,我的意思是有多个具有相同名称的静态字段)。因此Derived1.staticFieldDerived2.staticField不同。我该怎么做?

我希望你理解我的问题。如果您希望某些代码支持我的解释,请告诉我。

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()打印“Base”

instanceOfDerived1.printIt()打印“Derived1”

instanceOfDerived2.printIt()打印“Derived2”

4 个答案:

答案 0 :(得分:2)

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

您可以向子类添加相同的静态字段但请注意这不是多态 - 这只是隐藏。这与子类不能覆盖静态方法的行为一致。

我建议您尝试更好的解决方案;重写的静态字段不会给你带来多态性。

答案 1 :(得分:1)

您无法执行此操作,因为静态成员并未真正继承。继承与仅与实例相关的多态性一起进行。我认为您应该更好地解释您的真实问题,我相信我们可以建议您选择更好的设计解决方案。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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