一、多态之虚方法语法
1.多态的简介
面向对象有三大方法: 封装,继承,多态;
c#中提现多态的 三种方式: 虚方法,抽象类,接口;
解释: 在继承的前提下,实例化出不同的对象,这些对象调用相同的方法,但是却表现出不同的行为。
2.虚方法语法
父类:
public virtual 返回值类型 方法名(){
方法体代码;
}
子类:
public override 返回值类型 方法名(){
方法体代码;
}
二、多态之里氏转换原则
1.面向对象六大原则
①单一职责原则
②开闭原则
③里氏转换原则
④依赖倒置原则
⑤接口隔离原则
⑥迪米特原则
2.里氏转换原则
①在新建对象中,不仅可以在子类中new个对象(Cat c = new Cat()),也可以用父类型去new一个(Cattype c = new Cat())
②子类对象可以调用父类成员,父类对象不能调用子类成员
③如果父类对象中装的是子类对象,可以将父类对象转换为子类对象
3.is和as关键字(对象之间的比较)
is:如果为真返回true ,如果为假返回false
as: 转换成功则返回对应的对象,否则为null
三、多态之抽象类语法
1.抽象方法
之前我们学过虚方法(virtual)并且可以用子类函数(override)去重写虚方法。虚方法里面是有方法体的,意思是可以在虚方法里面编写代码。所以抽象方法就是在虚方法的基础上不能编写代码的方法
2.抽象方法的语法
在声明之前添加abstract,且没有方法体。例如 public abstract void name();
注意: 有些是需要在class前面添加abstract的。
3.抽象类的注意事项
①抽象类中不一定有抽象方法,但是抽象方法必须在抽象类里面
②抽象类不能被实例化
4.虚方法与抽象方法的区别
虚方法(virtual): 他在父类定义好之后,必须要写方法体,并且子类可以重写也可以不重写,编码比较自由
抽象方法(abstract): 在定义之后,不用写方法体,子类必须要重写才能运行,在开发过程中更加有规范
四、多态之接口语法
1.接口的语法要求
①使用Interface 关键字定义而不是用class 关键字,接口名以I 开头
②接口中不能包含字段但是可以有属性
③接口中的方法不能有方法体,全是抽象方法,但是不需要用abstract 修饰
④接口中成员不能添加访问修饰符,public ,private等。默认都是public
2.接口的注意事项
①接口中所有方法都是抽象方法,所以接口不能被实例化
②一个类可以实现多个接口
③一个接口可以继承多个接口,而类只能继承一个父类
3.接口的使用场景
当某一个子类拥有一些特殊的功能的时候,不适用于写在父类中时,就可以编写接口来进行实现
五、多态之虚方法抽象类接口对比
1.语法格式对比
2.使用场景对比
虚方法: 父类中的各别方法要用虚方法实现
抽象方法: 规范父类中的需要重写的方法,意思是每一个抽象方法必须要规范的拥有重写方法
接口: 是一种功能的扩展形式