关于多态, 需要补充一点, C++ 中, 重写的方法只有被 virtual 修饰了才具有多态性, 而 java 不同, 只要发生了重写, 重写的方法就具有多态性.
隐藏
我们都知道, 方法是可以被重写的, 其实在发生重写之前, 子父类中成员的关系是__隐藏__.
隐藏, 父类和子类拥有相同名字的属性或者方法时, 父类的同名的属性或者方法在形式上就”看不见了”, 但实际是还是存在的.
不同的是, 方法可以被重写, 而属性不能.
- 隐藏是静态的, 它不会动态绑定
- 属性只能被隐藏, 不能被重写
隐藏和重写的区别
简单的来说, 多态是针对方法的, 属性是没有多态的, 子类引用转成父类型后, 访问的就是父类的属性.
- 被隐藏的属性, 在子类被强制转换成父类后, 访问的是父类中的属性 (隐藏)
- 被重写的方法, 在子类被强制转换成父类后, 调用的还是子类自身的方法 (多态)
☠