父类中的静态方法指的是子类

时间:2016-02-22 07:24:19

标签: class oop inheritance

我们说我有这两个子类(伪代码):

Male.class:

include Person.class;

class Male extends Person {
    ...
}

Female.class:

include Person.class;

class Female extends Person {
    ...
}

最后我有了这个基类:

Person.class:

class Person {

    static function makePersonBySettings(settings) {
        var person;

        if(settings.gender == 'male') {
            person = new Male(settings.name);
        }
        else if(settings.gender == 'female') {
            person = new Female(settings.name);
        }

        return person;
    }

}

父的静态方法取决于知道Male.class和Female.class是什么。我不能在Parent.class的顶部导入子类(例如import Male.class),因为子类依赖于知道父类。

解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以通过创建包含工厂方法的专用类来将工厂方法(makePersonBySettings)与父类分离。

答案 1 :(得分:0)

class Person {

    static function makePersonBySettings(settings) {

        var person;

        person = new self(settings.name);

        return person;
    }

}

self将引用您的子对象。

Male::makePersonBySettings(settings)将返回Male个对象。