什么是多态?
看了很多描述,最后自己总结的一句话就是:
多态就是一个父类的引用指向子类的对象,在编译和运行时会表现出不同的行为。
对成员变量来说,编译和运行都是调用父类的成员变量
对成员方法来说,编译时调用父类的成员方法,而运行时调用真正对象的方法,而引用指向的是子类的对象,所以调用子类的方法
多态的前提条件
- 继承
- 重写方法
- 向上转型
总结
1.成员变量:(不涉及覆盖)
编译时: 参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过,没有,编译失败。
运行时: 参考引用变量所属的类中是否有调用的成员变量, 并运行该类所属中的成员变量。
简单的说:编译和运行都参考等号的左边。
2.成员函数(非静态):
编译时:参考引用变量所属的类中是否有调用的成员方法, 有, 编译通过, 没有,编译失败:
运行时:参考的是对象所属的类中是否有调用的函数。
简单的说:编译看左边, 运行看右边。
3.静态函数, 变量:
编译和运行都是参考左边参数类型!
其实静态方法不存在多态, 静态方法是属于类的,我们说的是对象的多态!静态方法直接用类名调用就好了,
没必要创建对象!
静态的方法只能被静态的方法所覆盖!