多态

第七周总结

—  多态就是指同一操作作用于不同的对象,会产生不同的结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

—  多态性可以是静态的或动态的。

—  多态性往往表现为“一个接口,多个功能”。

—  静态多态性

—  在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C#提供了两种技术来实现静态多态性。

   分别为:

—  函数重载

—  运算符重载

—  动态多态性

—  C#允许使用关键字abstract创建抽象类,用于提供接口的部分类的实现。当一个派生类继承自该抽象类时,实现即完成。抽象类包含抽象方法,抽象方法可被派生类实现。派生类具有更重要的功能。

—  关于抽象类的一些规则:

不能创建一个抽象类的实例  不能在一个抽象类的外部声明一个抽象方法  抽象类不能被声明为sealed。

—  在继承关系中,子类会自动继承父类中的方法,但有时父类的方法不能满足子类的需求,那么可以对父类的方法进行重写。当重写父类的方法,要求子类的方法名、参数类型和参数个数必须与父类方法相同,而且父类方法必须使用virtual关键字修饰,子类方法必须使用override关键字修饰。

—  被virtual关键字修饰的方法称作虚方法。

—  override关键字:

重写父类中的virtual修饰的方法,实现多态。

—  如果父类中的方法在子类中并不适用,那么子类需要自主更改继承的方法或是属性,父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字

—  定义关键字:虚方法virtual  重写override

—  当实例方法声明包含virtual修饰符时,称该方法为虚方法。不存在virtual修饰符时,称该方法为非虚方法。

—  对于非虚的方法,无论被其所在类的实例调用,还是被这个类的派生类的实例调用,方法的执行方式不变。而对于虚方法,它的执行方式可以被派生类改变,这种改变是通过方法的重载来实现的。

—  注意:子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限,如父类方法的访问修饰符是public,子类的方法就不能使用private修饰。

—  隐藏和重写方法的区别: * 如果方法是被隐藏的, 则根据引用类型来调用方法; 如果方法是被重写的, 则根据对象的实际类型来调用方法.

—   * 如果想重写方法,需要对方法用virtual和override修饰; 如果想隐藏方法, 需要在子类中的方法用new修饰. (显然这个new和在创造对象时所用的new含义不一样)

—   * 如果子类和基类中含有同名(一模一样)的方法(方法体不一定一样, 只是函数头一模一样), 默认情况下是隐藏而不是被重写.

—   重载和重写的区别:* 重载的条件:

—            1.必须在同一个类中2.方法名必须相同3.参数列表不能相同。

—  *重写的条件:

—            1. 在不同的类中

—            2. 发生方法重写的两个方法返回值,方法名,参数列表必须完全一致

—            3. 子类抛出的异常不能超过父类相应的方法抛出的异常

—            4. 子类方法的访问级别不能低于父类相应方法的访问级别(public,package,protected, private)

—            5.方法体不同

—  base关键字:当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。C#中提供了一个base关键字专门用于在子类中访问父类的成员,例如访问父类的字段、方法和构造方法等。接下来分两种情况来学习一下base关键字的具体用法。

 

posted @ 2019-04-10 22:32  里昂IT  阅读(189)  评论(0编辑  收藏  举报