Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are parent constructors called if a child class does NOT define a constructor?

Tags:

In the PHP Constructors and Destructors documentation it states

Note: Parent constructors are not called implicitly if the child class defines a constructor. In order to run a parent constructor, a call to parent::__construct() within the child constructor is required.

But what if the child class does not call a constructor, will the parent constructor still be called? Or should we create a constructor that calls the parent constructor anyway?

IE:

class BaseClass {
   function __construct() {
       print "In BaseClass constructor\n";
   }
}

class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();
   }
}
like image 917
Kirill Fuchs Avatar asked Oct 29 '12 00:10

Kirill Fuchs


People also ask

Does child class call parent constructor?

If the child class constructor does not call super , the parent's constructor with no arguments will be implicitly called. If parent class implements a constructor with arguments and has no a constructor with no arguments, then the child constructors must explicitly call a parents constructor.

Does a parent class need a constructor?

Then the child class should always explicitly state what parent's constructor it wants to call. Am I right to conclude that a parent class always needs a default or no-arg constructor? No, it's fine to have a parent class without the default constructor as long as its children don't invoke super() .

What happens if you don't define a constructor for a class Java?

If we don't define a constructor in a class, then the compiler creates a default constructor(with no arguments) for the class. And if we write a constructor with arguments or no arguments then the compiler does not create a default constructor.

Does child class call parent constructor Python?

Calling a parent constructor within a child class executes the operations of the parent class constructor in the child class.


2 Answers

Maybe this was sort of obvious but did some looking around, and a direct answer to this question surprisingly wasn't very easy to find so here it is:

If the child class does NOT define a constructor then the parent constructor will be called.

In the example below $obj will still call the constructor from BaseClass because SubClass never called a constructor.

class BaseClass {
    function __construct() {
       print "In BaseClass constructor\n";
    }
}

class SubClass extends BaseClass {
    //I do not have a constructor :(
}

$obj = new SubClass();
like image 196
Kirill Fuchs Avatar answered Sep 28 '22 08:09

Kirill Fuchs


Take into account a constructor is a method that can be overridden as any other method. If the parent class has a constructor, all its children classes will inherit that constructor. If a child overrides the constructor, this will be used when creating new objects and parent's constructor is not called implicitly. If the child does not override the constructor, the parent's constructor will be used. This concept applies to multiple inheritance.

like image 39
Al_ Avatar answered Sep 28 '22 08:09

Al_