为什么需要重写
为了选择性复用,解决父类所定义方法在子类中不适用(虚方法),或父类没有实现(抽象方法),这样的方法子类可以重写。
方法重写有三种重写的方法
- 虚方法重写
- 重写方法重写
- 抽象方法重写
abstract 方法:在子类必须重写,除非子类也是抽象类
virtual 方法:在子类可以重写,父类方法的做法与子类不同
override方法:已经重写过的方法,在子类还可以继续重写,除非被标识为sealed。
方法重写时必须在方法前加override关键字
sealed(密封)的作用
- 放在类前封闭类,指示任何类都不可继承当前类
封闭类定义:sealed修饰的类
封闭类特点:不能被继承。不能有子类。可以实例化!
2. 放在重写方法前封闭方法,指示当前类的子类,不能再次重写该成员,sealed 用在方法前边,必须和override 在一起。sealed override 修饰的方法 叫封闭方法,只有重写方法才可以封闭。
一、虚方法重写
1.1 什么是虚方法:
定义【语法】:用vritual关键修饰的已经实现的方法,即是虚方法
语义【含义】:虚方法表示一个可以在子类中重写的方法 【重写不重写都可以】
1.2 虚方法重写
虚方法重写是多态实现的一种方式;
【步骤1:】在父类中定义虚方法
【步骤2:】在子类中定义重写方法
【重写方法定义:和父类中的方法名相同参数相同方法返回类型相同,要加override】
下面是利用虚方法重写 计算圆、三角形、矩形的面积:
调用:
二、抽象方法重写
具体抽象方法讲解https://blog.csdn.net/qq_40229737/article/details/104009527
补充:
依赖倒置 倒转也可以说( 依赖抽象)原则
客户端代码尽量依赖抽象的组件,因为抽象的是稳定的。实现是多变的。
分析需求中的名词 具体来说(多变):狗 猫 ;然后【泛化】角色 抽象(稳定)
代码实现:定义 实现父类 抽象 【特化】实现子类 具体
调用:依赖抽象意思是说:优先选择父来完成,父不定才找子!!