标签:
面向对象的一个重要特性就是继承。最近在看源码中,遇到的一系列问题表明的自己的基础还是有些许欠缺,主要问题如下:
1:子类在继承父类的时候,如果父类定义了__construct()构造方法,并且要求传递参数,而子类使用默认的__construct()构造方法的时候,子类依然在实例化的时候,要传递参数。结论:子类在实例化的时候,会跟随的父类的实例化
class A { protected $name; /** ** 自定义了初始化构造方法 **/ public function __construct($name){ $this->name = $name; $this->funcAa(); } } class B extends A{ } $b = new B(); //实例化错误,子类初始化的时候,父类无法正常初始化 $b = new B(); //正确
2:$this关键字代表的当前的实例化对象,也就是new后面的对象。如果是子类实例化,当父类和子类同时存在方法的时候,也就是JAVA中的重写,那么调用子类的方法,如果子类方法不存在,则调用父类的方法。遵循就近原则
class A { public function funcA(){ echo "This is A class"; } public function funcAa(){ /** ** 指定的是B这个实例化对象 **/ $this->funcA(); } } class B extends A{ /** ** 重写父类的方法 **/ public function funcA(){ echo "This is B class"; } } $b = new B(); $b->funcAa(); //子类没有,则自动调用父类的方法,子类复写了父类的方法,则调用子类自身的方法
标签:
原文地址:http://www.cnblogs.com/axunz/p/5091194.html