022、多态中的隐藏与重写

Par @Martin dans le
Tags :

关于多态, 需要补充一点, C++ 中, 重写的方法只有被 virtual 修饰了才具有多态性, 而 java 不同, 只要发生了重写, 重写的方法就具有多态性.

隐藏

我们都知道, 方法是可以被重写的, 其实在发生重写之前, 子父类中成员的关系是__隐藏__.

隐藏, 父类和子类拥有相同名字的属性或者方法时, 父类的同名的属性或者方法在形式上就”看不见了”, 但实际是还是存在的.

不同的是, 方法可以被重写, 而属性不能.

  • 隐藏是静态的, 它不会动态绑定
  • 属性只能被隐藏, 不能被重写

隐藏和重写的区别

简单的来说, 多态是针对方法的, 属性是没有多态的, 子类引用转成父类型后, 访问的就是父类的属性.

  • 被隐藏的属性, 在子类被强制转换成父类后, 访问的是父类中的属性 (隐藏)
  • 被重写的方法, 在子类被强制转换成父类后, 调用的还是子类自身的方法 (多态)