我可以从父类调用子类的构造函数吗?


Can I call a constructor of a subclass from the parent class?

在下面的代码中,foo的构造函数可以调用child1还是child2的构造函数?

class child1 extends foo{
  function child1(){
    do_stuff();
  }
}
class child2 extends foo{
  function child2(){
    do_stuff();
  }
}
class foo{
  function foo(){
    // run child1, child2 etc... ? is it possible?
  }
}
new foo();

不可以,您只能从父类访问类,而不能以相反的方式访问类。父类不知道这些子类的存在。

如果你解释了你正在尝试做的事情的用例,有人可能会提出更好的方法。

在我们讨论如何处理您的问题之前,我认为我们应该澄清一下您在此处的代码中显示的 OOP

在您的示例中,类 foo 是基类,具有所有类型的 foo 通用的功能和属性。 例如,Foo可能是一棵树。 所有的树木都有树干、根、树枝,并将阳光转化为能量。

现在,您的孩子1和child2类将是foo的十足者,并且具有与foo相辅相成或不同的特定内容。 例如,child1 可能是一个 Oak,它"是一棵"树,但添加了 leaf 属性、acorn 属性和 hibernate 属性。

孩子 1 和孩子 2 知道关于 foo 的一切,但 foo 不知道孩子 1 和孩子 2 的存在。

现在,如果我了解您要做什么,您将通过实例化您的 child1 和 child2 类并从另一个类或方法/函数中调用您在这些对象上所需的任何方法来实现它。