Можно ли вызвать конструктор подкласса из родительского класса? - PullRequest
0 голосов
/ 04 мая 2011

В приведенном ниже коде может ли конструктор 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();

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

Нет, вы можете получить доступ к классам только из родительского класса, а не наоборот. Родитель не знает, что эти дочерние классы существуют.

Если вы объясните пример использования того, что вы пытаетесь сделать, кто-то может предложить лучший подход.

0 голосов
/ 04 мая 2011

Прежде чем мы обсудим, как сделать ваш вопрос, я думаю, что мы должны немного уточнить оОП, который вы показываете в своем коде здесь.

В вашем примере класс foo является базовым классом и обладает функциональностью, свойствами, общими для всех типов foo. Например, Foo может быть деревом. Все деревья имеют ствол, корни, ветви и превращают солнечный свет в энергию.

Теперь ваши классы child1 и child2 были бы потомками foo и имели бы определенные вещи, которые в дополнение или отличались от foo. Например, child1 может быть Oak, который «является» деревом, но добавляет свойство leaf, свойство acorn и свойство hibernate.

Child1 и Child2 знают все, что нужно знать о foo, но foo не знает, что child1 и child2 существуют.

Теперь, если я понимаю, что вы пытаетесь сделать, вы реализуете это, создавая экземпляры классов child1 и child2 и вызывая любые методы, которые вам нужны для этих объектов, из другого класса или метода / функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...