虚方法
虚方法
虚方法就是多态
virtual可以在方法上,class上添加
为什么why要把子类句柄赋值给父类句柄。,以子类的实现优先。
虽然句柄类型不一样,但是调用的函数仍以子类的实现优先。子类若未实现,则执行父类的。——虚方法这块。
不能给变量添加virtual,但是方法可以添加virtual虚方法。父类访问的变量范围只有父类的变量范围。
(1.类的封装时,学了local,protected先不要添加。 2.类的继承时,为了让以后更简单,为了让以后能访问到更多变量,子类继承父类时,不要出现同名的变量。子类和父类出现同名的方法很常见,父类有个A和B,子类就不要出现A和B了。 3.多态,虚方法时。用不同类型句柄调用相同子类对象同一方法时,为了让其输出结果一致,应该在一开始父类(根类)的同名方法就声明virtual,后面声明否不重要。如下图。)
类型转换
静态类型转换
动态类型转换,用的最多的就是将父类句柄赋值给子类句柄。重点是$cast()。子类句柄可直接赋值给父类句柄,访问范围:大🔺缩到小🔺。 而父类句柄赋值给子类句柄时,编译会报错。父类句柄若指向子类对象,那可通过$cast来完成转换,将右侧句柄转化成左侧的;但是若父类句柄指向父类对象,不能转化到子类句柄。
父类句柄指向子类对象时。父类句柄若想访问子类方法,可通过虚方法,动态查找可解决。但是若想用父类句柄访问子类变量,不能直接访问,只能把父类句柄转化为子类句柄,通过子类句柄直接去访问。——动态句柄转化。