多态是指两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同响应的方式。实现多态的方式:
一、抽象类和抽象方法
1、 抽象类的语法:
访问修饰符 abstrac class 类名
2、 父类中的方法:
访问修饰符 abstrac 返回类型 方法();
注意:含有抽象方法的类必然是抽象类。抽象类中的方法并不一定都是抽象方法。
抽象类是不能被实例化的。只能通过它的子类来实现该类的方法,除非它的子类也是一个抽象类。
抽象类不能是密封或者静态的,抽象类被子类继承并实现它的抽象方法。
3、重写抽象方法:
访问修饰符 override 返回类型 方法()
4、使用场合:
A 父类提供了一个功能或者规定,约束子类的行为。
示例:
里氏替换原则
"is"操作符用于检查对象是否与给定的类型相同。如: if(obj is string){}
"as"用于两个对象之间的类型转换。如:string as obj;
注意:as运算符当转换失败时,运算符将产生空,而不是引发异常。
is转换失败要发生异常。
二、虚方法:
访问修饰符 virtual 返回类型 方法()
{
//方法体
}
1、每个对象Object都有一个Equals()方法,用于确定两个实例对象是否相等,它是一个虚方法,可以重写这个方法。
public virtual bool Equals(Object obj)
默认情况下,Equals()方法只支持引用相等,也就是相比较的两个对象是否引用同一个对象。
重写Equals()虚方法如:
2、虚方法和抽象方法的区别:
A、修饰的关键字不同
B、父类中方法体的区别
C、重写的区别(抽象方法必须override)
D、抽象方法只能在抽象类中,而虚方法除了密封类外都可以写
3、方法重写的条件:
A、方法签名必须一样
B、访问修饰符允许被放大
C、返回类型必须一样
总结:面向对象的三大特征
封装:保证对象自身数据的完整性、安全性
继承:建立类之间的关系,实现代码复用、方便系统的扩展
多态:相同的方法调用可实现不同的实现方式
三、方法重载
1、与重写方法的区别
A、应用场合不同:如果父类中有abstract/virtual,才能被重写,重写方法要求类与类之间是继承关系。
而重载没有过多的要求。
四、方法隐藏:父类和子类的方法都存在。
五、静态(satice)类/密封(sealed)类/抽象(abstract)类它们各自的特点: