Father a = new Son();
Son b = new Son();
1. a只能调用Faher中有的函数,不能调用Son中新添加的函数,同时如果Son中有覆盖掉Father的函数,访问的是Son中的函数,也就是说引用a与实例方法动态绑定。
a访问Father中有的函数:
输出结果如下,可以看到调用的是子类的方法:
a访问Father中没有的函数
输出结果如下,报错:
2. 但是引用a与成员变量、静态方法静态绑定,也就是说,a只能访问a里的成员变量、静态方法,即使b里有同名的成员变量、静态方法。
输出结果:
3. b可以调用Father里的函数,也可以调用Son里另外添加的函数。
输出结果:
综上:
Father a = new Son();
Son b = new Son();
- a只能调用Father中有的函数,不能调用Son中新添加的函数,同时如果Son中有覆盖掉Father的函数,访问的是Son中的函数,也就是说引用a与实例方法动态绑定。
- 但是引用a与成员变量、静态方法静态绑定,也就是说,a只能访问a里的成员变量、静态方法,即使b里有同名的成员变量、静态方法。
- b可以调用Father里的函数,也可以调用Son里的函数。
- 对构造函数的执行,二者没有区别,都是先父后子。