php继承父类构造函数,子类无法继承父类的构造方法?

用户投稿 141 0

关于“php_类继承构造函数”的问题,小编就整理了【3】个相关介绍“php_类继承构造函数”的解答:

子类无法继承父类的构造方法?

1.子类不能继承父类的构造函数,但是可以调用父类的构造函数

2.如果父类没有定义构造函数,系统会默认定义一个无参无返回值的构造函数,子类继承时无需在子类构造函数中==显式 == 调用super();

(即子类的构造函数中默认调用父类的无参构造函数,只不过第一行代码:super();一直被省略了)。

3.如果父类有有参构造函数,则子类必须在自己的构造函数中显示的调用父类的构造函数即super(参数名)。

如果父类的构造函数只有一个,且修饰符是private,则不可以被继承。

4.如果子类的某个构造函数想要调用父类的其他带参构造函数,在构造函数第一行添加super(args1,args2…);(参数的多少根据想调用父类构造函数的形参而定)

5.如果子类的构造函数在第一行super(args1,args2…);调用了父类的其他有参构造函数,那么子类的该构造函数不会再调用父类的默认构造函数。

子类不可以继承父类的构造方法,只可以调用父类的构造方法。子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。

一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。

创建子类对象时,子类和父类的构造函数执行顺序是什么?

继承时构造函数的调用顺序: 1,如果继承虚基类,先调用虚基类的构造函数,如果有多个虚基类,按顺序调用。

2,如果继承基类,调用基类的构造函数;如果有多个基类,按顺序调用。3,如果类中定义了成员对象,调用成员对象的构造函数;如果有多个成员对象,则按成员对象定义的顺序调用; 4,调用自身的构造函数; 析构函数的调用顺序与此相反。

继承时构造函数的调用顺序:

1,如果继承虚基类,先调用虚基类的构造函数,如果有多个虚基类,按顺序调用。

2,如果继承基类,调用基类的构造函数;如果有多个基类,按顺序调用。

3,如果类中定义了成员对象,调用成员对象的构造函数;如果有多个成员对象,则按成员对象定义的顺序调用;

4,调用自身的构造函数;

析构函数的调用顺序与此相反。

构造函数在被继承的时候为什么会调用父类的构造函数?

不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。继承(extends)的含义其实是“扩展”,子类完全没必要扩展父类的构造函数,因为反正每次调子类的时候都会“自动运行”它父类的构造函数,如果真的需要子类构造函数特殊的形式,子类直接修改或重载自己的构造函数就好了。估计是你对“构造函数”的意义本身不理解,“调用”一个类有“继承”和“组合(说白了new一个类)”两种方式,当你“调用”一个类的时候就会“自动运行”它的“构造函数”。

到此,以上就是小编对于“php_类继承构造函数”的问题就介绍到这了,希望介绍关于“php_类继承构造函数”的【3】点解答对大家有用。

抱歉,评论功能暂时关闭!