多态中的隐藏与重写

隐藏

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

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

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

  • 隐藏是静态的, 它不会动态绑定

  • 属性只能被隐藏, 不能被重写

隐藏和重写的区别

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

  • 被隐藏的属性, 在子类被强制转换成父类后, 访问的是父类中的属性 (隐藏)

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

Last updated