下面是我对静态绑定和动态绑定的一点理解,不足之处,大家补上
先说明下场景 父类 子类 父类和子类里面都有静态函数也有非静态函数
父类 父类引用 = new 子类(); 父类引用调用了静态函数,这打出来是父类的还是子类的呢?
结果:父类的,由于static 的特性,优先于对象存在,当创建子类对象的时候,先加载父类的类,就在这个时候静态和该类,进行绑定,这就是动态绑定,只要这个父类引用还在就一直绑定在上面。
那么非静态绑定呢,当调用非静态函数的时候,这个时候对象出来了,new出来是子类,就动态的绑定到子类的方法上,如果是父类的,及动态的绑定到父类的方法上,这就是动态绑定,前提是该函数是非静态的。
最后引用毕老师的一句话,成员函数在多态时,编译看左边,运行看右边 非静态情况
无论编译和运行都看左边(该有引用所属的类) 静态情况
|