考虑以下类层次结构:
Base< - Derived1
基础< - Derived2
Base有一个静态字段。
我希望派生类继承该静态字段,但每个类应该有自己的'实例'(例如,我的意思是有多个具有相同名称的静态字段)。因此Derived1.staticField
与Derived2.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”
答案 0 :(得分:2)
静态方法/字段绑定到类型,因此与实例无关。
您可以向子类添加相同的静态字段但请注意这不是多态 - 这只是隐藏。这与子类不能覆盖静态方法的行为一致。
我建议您尝试更好的解决方案;重写的静态字段不会给你带来多态性。
答案 1 :(得分:1)
您无法执行此操作,因为静态成员并未真正继承。继承与仅与实例相关的多态性一起进行。我认为您应该更好地解释您的真实问题,我相信我们可以建议您选择更好的设计解决方案。
答案 2 :(得分:1)
你不能继承任何静态的东西。它属于类型/类,而不是实例。可以将继承视为将非私有字段/方法从父类复制到扩展它的类。
答案 3 :(得分:1)
您可以将“静态字段”视为全局变量,它甚至不是Class的一部分。 Derived1.staticField与Derived2.staticField的区别是不可能的,因为这就是静态字段的设计方式。