• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
singular。独家专属
博客园    首页    新随笔    联系   管理    订阅  订阅

面向对象之多态

 一、访问修饰符的使用域

  public可以在类的内部、子类、其他类以及程序中调用
  internal 可以在类内部、子类、其他类中调用,不能在程序集中调用
  protected可以在类内部、子类中调用,不可在其他类以及程序集中调用
  private只可在定义的类内部调用,不可在子类、其他类以及程序集中调用

二、继承:将上一层次的东西选择性的传递下来,从而提高代码的重用性,降低了程序的复杂性

继承的两个特性:传递性、单根性

  1、继承类:默认继承(system.object)
     1)单向继承,一个子类只能派生自一个类,具有单根性,可继承多个接口
     2)定义语法:

访问修饰符 class 子类名 :派生类名{代码片段}

 

     3)作用:可增加、修改、替换类中的方法对类进行扩充

2、调用积累构造函数
   a)默认的构造:进行实例化时需遵循的规则:先调用基类无参构造,再调子类构造
   b)base关键字调用基类构造:
    语法:
    调用基类构造:

子类构造函数(参数列表):base(参数列表)

 

   调用基类方法或属性:

base.属性/方法

 

  好处:提高数据安全性
  调用顺序:基类构造,子类构造
 注:base关键字访问基类成员不可在静态方法 ,不能访问基类的私有成员

3、继承的传递性:不限定传递次数,若不想该类进行派生可使用sealed定义密封类

4、隐藏类成员与访问:用new关键字显式的隐藏基类继承下来的成员
 
5、继承规则
   1)可传递
   2)派生类是对基类的扩展
   3)基类中的构造函数和析构函数以及访问修饰符为private的成员不可被继承
   4)若子类定义与基类相同的新成员,基类成员会被覆盖,在子类中不可访问基类中被覆盖的相关成员
   5)类中可定义虚方法、属性,子类中重载,实现

 

6、父类中的成员如果采用private修饰符,它将作为私有成员,其他任何类都无法访问。

7、C#中提供了另一种访问修饰符protected,被这个访问修饰符修饰的成员允许被其子类访问,而不允许其他非子类访问。

 

二、多态: 同一操作作用于不同类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。 

  1、多态的分类:重载重写

    重载:方法名相同,参数类型、个数、顺序不同 使用关键字new
    重写:在基类中定义虚方法,在子类中使用override对该方法进行重写
   虚方法关键字:virtual

 
在父类中定义虚方法的语法:
    访问修饰符    virtrul    返回类型    方法名称(参数列表)
    {
        //方法初始实现
    }

 注意:虚方法实现后,如果子类没有重写,调用的是基类的默认实现

 
在子类中重写父类虚方法:
    访问修饰符    override    返回类型    方法名称(参数列表)
    {
        //方法初始实现
    }
子类重写基类的虚方法,也就是将virtual换为override,添加自己的实现,访问修饰符、类型、方法签名和参数列表都不变。

  

 关键字override:子类中修改基类方法的实现,基类中必须有virtual方法或abstract方法
   2、virtual关键字不仅可以定义虚方法,也可定义其他虚成员,让子类进行重写
    1)基类虚成员呗重写时,需使用相同访问修饰符
    2)类成员被虚化了则不能被抽象化,virtual与abstract 同时出现在同一成员上
    3)new virtual static关键字不能与override同时使用
    4)子类使用new关键字隐藏基类成员,则该成员声明时不用override关键字

virtual的规则

  基类的虚成员被重写时,需要使用相同的访问修饰符。
 
  在类的成员前加上virtual关键字后,不能再有abstract、statiic或者override关键字。
 
  如果子类使用new隐藏了基类的成员,就不能再该成员声明中使用override关键字。
 
  new、static和virtual关键字不能与override一起使用

三、里氏替换原则:子类可以替换基类,并出现在基类能够出现的任何地方,基类不能替换子类

例:Student为Person类派生出来的子类

Student is a Person
Person p=new student();

 

posted @ 2013-06-14 11:13  singular 。独家专属  阅读(555)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3