PS:本文图片均来自路科验证网络课程截图
1、子类与父类拥有同名变量
一般情况下同名变量可以通过子类或者父类的句柄索引到各自的变量,如上图18行显示i=2,19行i=3。但是如果第九行没有,也就是子类中没有定义i的值,那么第19行则索引到的是父类中的i=2。
2、关于函数的继承
在子类中出现父类的同名不同功能函数时,子类的函数中只有new()函数会主动调用父类中的new(),而其它函数只要不明确super.则不会主动调用父类。
27行i=2,28行i=3,如果没有第14行则28行会自动索引父类中的i=2,因为虽然子类中没有明确调用super.new(),但是系统还是会主动调用。
第30行i=4,即2向左移1位,32行输出12,即3向左移2位,但此时子类中的shift函数并不会先主动调用父类的shift使结果变为24(即3先左移1位再左移2位)。
虽然子类中的new函数可以不明确调用super,但是当new()函数中传递了参数,此时则必须明确调用super了(所以建议将super都加上)。
如上图第30行i=4,即3+1=4。第31行i=2,计算过程为i=1先输入父类中进行new()函数,此时父类中得i=2,随后进行子类中的new(),由于i=1不满足val>=2的条件,所以 31行索引到的是父类的i=2。第33行i=8,即i=4向左移1位。第35行i=32,即i=2向左移3位。
当27行传入的数值>=2了此时的结果就大不一样了,因为此时子类中的就能够明确的索引到i值了。
3、关于子类的句柄赋给父类的句柄
子类的句柄赋给父类的句柄是成立的,反之则不允许。赋句柄以后子父类中的同名变量可以通过句柄直接访问。
但是赋句柄的过程中有另外一种情况,就是子类中声明了一个父类中的没有的变量,那么父类到底能不能通过句柄所引导这个变量呢?答案是不可以的。此时记住一个原则,父类是子类的子集,同样的参数父类中有,那么子类父类都能搜索到;如果仅仅子类中有而父类中没有,那么只能够在子类中索引。
如上图34行是不可以通过父类的句柄tmp索引到k值的,因为k只存在于子类中。