我需要一个对象 B,但是当我执行 'B.GetByID()' 时我得到了一个对象 A
public class A
{
public A()
{
}
public static A GetSelf()
{
return new A();
}
public static A GetByID()
{
return GetSelf();
}
}
public class B extends A
{
public B()
{
super();
}
public static B GetSelf()
{
return new B();
}
}
B.GetByID(); //returns A, i need B
最佳答案
您只能通过在 B GetByID()
中创建一个 B
方法来做到这一点。不过有点丑。。。
基本上你的 B.GetByID()
调用将被解析为 A.GetByID()
;编译后的代码中没有任何内容表明它最初是 B.GetByID()
,并且 GetSelf()
中对 GetByID()
的调用无论如何都会被解析为 A.GetSelf()
。
基本上,静态方法不允许以您想要的方式实现多态。我建议您创建一个 AFactory
和一个 BFactory
子类,并以正常方式使用方法覆盖,以及实例方法。