方法覆盖和多态

知识框架:



方法覆盖与多态

方法覆盖的定义

什么时候使用方法覆盖

多态的基础语法

多态在开发中的作用


方法覆盖的定义

方法覆盖又叫做:方法重写,英文单词叫做:Override、Overwrite都可以,比较常见的:方法覆盖、方法重写、override。

什么时候使用方法覆盖

当子类从父类中继承过来的方法无法满足当前子类业务需求的时候,需要将父类中继承过来的方法进行覆盖(重新编写)。

方法覆盖的条件及注意事项

注意事项:

  • 方法覆盖只是针对方法,和属性无关。
  • 私有方法不能被继承,所以也无法覆盖。
  • 构造方法不能被覆盖,所以构造方法也不能被覆盖。
  • 方法覆盖只是针对于实例方法,静态方法覆盖没有意义。
  • 由于覆盖之后的方法与原方法一模一样,建议在开发的时候采用复制粘贴的方式, 不建议手写,因为手写的时候非常容易出错。
  • 访问权限不能更低,可以更高。
  • 重写之后的方法不能比之前的方法抛出更多的异常,可以更少。

我们在编写代码的时候,怎么样才能在代码级别上构成了方法覆盖:
条件:

  • 两个类必须要有继承关系。
  • 重写之后的方法和之前的方法具有:
    相同的返回值类型、
    相同的方法名、
    相同形式的参数列表。

多态

多态就是“同一个行为”发生在“不同的对象上”会产生不同的效果。
多种形态,多种状态。

多态的基础语法

多态(Polymorphism)属于面向对象三大特征之一,它的前提是封装形成独立体,独立体之间存在继承关系,从而产生多态机制。多态是同一个行为具有多个不同表现形式或形态的能力。

多态在java中是怎么体现的:

在 java 中允许这样的两种语法出现,一种是向上转型(Upcasting),一种是向下转型(Downcasting),向上转型是指子类型转换为父类型,又被称为自动类型转换,向下转型是指父类型转换为子类型,又被称为强制类型转换

如下图所示:

java 覆写方法 java方法覆盖的概念_向下转型


注意:在java 语言中有这样的一个规定,无论是向上转型还是向下转型,两种类型之间必须要有

继承关系,没有继承关系情况下进行向上转型或向下转型的时候编译器都会报错。

多态指的是:父类型引用指向子类型对象。
包括编译阶段和运行阶段。
编译阶段:绑定父类的方法。
运行阶段:动态绑定子类型对象的方法。

向下转型的时候需要注意:
在进行向下转型之前先进行运行期类型判断,使用instanceof。
instanceof 运算符的语法格式是这样的:
(引用 instanceof 类型)
instanceof 运算符的运算结果是布尔类型,可能是 true,也可能是 false。

其实多态存在的三个必要条件分别是:
① 继承
② 方法覆盖
③ 父类型引用指向子类型对象

多态在开发中的作用

软件开发原则:
开闭原则。开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。
开闭原则中“开”,是指对于组件功能 的扩展是开放的,是允许对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的修改是封闭的,即修改原有的代码对外部的使用是透明的。
面向抽象编程会让你的代码耦合度降低,扩展能力增强,从而符合 OCP 的开发原则。