如何为子类使用相同的工厂方法?

use*_*674 4 java factory

我需要一个对象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
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

你只能做到这一点的创造了B GetByID()在方法B.虽然这有点难看......

基本上你的B.GetByID()电话将被解决A.GetByID(); 编译代码中的任何内容都不会表明它最初是B.GetByID(),并且无论如何都将解析对GetSelf()内部的调用.GetByID()A.GetSelf()

基本上,静态方法不允许以您希望的方式进行多态化.我建议你创建一个AFactory和一个BFactory子类,并使用实例方法以正常方式使用方法覆盖.