思想如下:
父类有个 num=5; 子类重新定义了自己的num=4;
Demo s=new Demos(); 这是一个父类引用指向了子类对象。
内存中 其实有两个 num。
但是如果子类有自己的属性,则访问自己的属性。//这并不是重写。重写只发生在一般的函数上。
如果子类 覆写了 父类的方法,成员函数有覆盖的特性。所以会调用子类重写过的方法。
如果子类有特有方法。那么父类引用在调用时,只能调用父类中的方法,
不能调用子类特有的方法。 这也是多态的局限性。
另外再给你总结一个结论:
1,成员变量。
编译时期:查看引用型变量所属的类中是否有被调用的成员变量。如果有,编译通过,如果没有,编译失败。
运行时期:也是查看引用型变量所属的类中的成员变量。
简单说:对于成员变量在多态调用时,编译和运行都看等号的左边。
2,成员函数。
简单说:对于成员函数在多态调用时,编译看左边,运行看右边。
因为在子父类中,成员函数有覆盖的特性。
3,静态函数。
简单说:对于静态函数在多态调用时,编译和运行都看等号的左边。 |