我需要一个对象 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 子类,并以正常方式使用方法覆盖,以及实例方法。

10-08 14:57