学习看见这个内置常量_TRAIT_ ,菜鸟教程给的解析是"从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。"
那么拿菜鸟教程现成的图来看一下:
![](https://img.haomeiwen.com/i15603021/293f70f080bd5bda.png)
首先,MyHelloWorld (子类)继承Base类的方法及属性,那么Base就是所指的基类(父类),因为trait与use配合使用,也就是说相对于MyHeolloWorld而言SayWord是子类,而此时因为MyHelloWolrd继承了其父类Base的方法与其子类sayWorld的中的方法相同,所以MyHelloWorld中的方法其实就变成了SayWorld中的函数,但是SayWord中又写了 "parent::sayHello()",所以相当于MyHelloWorld又继承了Base中的方法("这里用的parent的原因是可以解决子类与父类方法重名,导致继承于父类的这个方法被覆盖"),那么最后的结果输出就是 Hello World!。
网友评论