Code:
1 | class A { |
当子类继承父类之后,this的指向是动态绑定的,也就是说,当父类的方法被重写之后,调用的就是子类的方法,没有重写,就调用父类的方法。
在本文中,父类的foo方法是私有的,并没有继承给子类,也就没有重写之说,所以,根据前面的定论,没有重写就调用父类中的方法。所以就打印了’a’。
另外还有三种绑定方式,分别是 self
parent
static
。
self是静态绑定,它的指向始终是在编译时所在的那个类。parnet也是静态绑定,它始终指向编译时所在类的父类,而这个父类是声明类时就指定了的,所以指向是明确的。static属于后期静态绑定,或者说是动态绑定或运行时绑定,它的指向与调用者有关。若调用者是所在类的实例,那么它就指向本类;若调用者是所在类子类的实例,它则指向子类。