`

面向对象之多态

阅读更多
原帖地址:http://www.cnblogs.com/tyuanyuan/archive/2013/06/14/3133581.html

 一、访问修饰符的使用域


  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();


 

本文链接

分享到:
评论

相关推荐

    JAVA面向对象之多态.pdf

    JAVA面向对象之多态.pdf

    C++面向对象之多态的实现和应用详解

    本文主要给大家介绍的是关于C++面向对象之多态的实现和应用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 多态 大家应该都听过C++三大特性之一多态,那么什么多态呢?多态有什么用...

    新技术培训 培训讲义8_面向对象之多态.doc

    在面向对象编程中,多态指的是一个对象可以表现出多种形态,这意味着一个类的对象不仅可以表现为它本身,还可以表现为它的父类或者它实现的接口类型。通过这种方式,我们可以编写更加通用的代码,而不必关心具体对象...

    Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法。分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 实现代码的重用,相同...

    PHP面向对象-接口、多态

    一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。 所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。 简单的说,一个类拥有其父类、和已实现接口的身份。

    C#面向对象编程-多态习题[整理].pdf

    C#面向对象编程-多态习题[整理].pdf

    Java 面向对象三大特性之多态

    面向对象编程是Java的核心特性,其中封装、继承和多态是三大基石。在这个主题中,我们将专注于"多态"这一特性,它是Java编程灵活性和可扩展性的重要体现。 多态(Polymorphism)在希腊语中意为“多种形态”,在编程...

    计算机后端-PHP视频教程. php之面向对象29 多态(选学).wmv

    计算机后端-PHP视频教程. php之面向对象29 多态(选学).wmv

    2024面向对象高级多态接口HM

    ### 2024面向对象高级多态接口HM #### 一、多态 ##### 1.1 多态概述 多态是面向对象编程语言中的一个重要特性,它允许使用一个接口代表不同的类的行为。多态的核心在于继承与实现机制,并且依赖于方法的重写。在...

    动物练习.NET面向对象继承多态

    在.NET框架中,面向对象编程(Object-Oriented Programming,OOP)是一种强大的软件开发范式,它基于类和对象的概念,以及封装、继承、多态等核心特性。本实践项目名为“动物练习”,旨在通过模拟不同类型的动物来...

    实例讲解PHP面向对象之多态

    多态是面向对象编程(OOP)的三大特征之一,它在软件设计与开发中扮演着核心角色。本篇文章首先明确了多态的概念,接着通过PHP语言中的具体实例,阐述了多态的使用场景以及它带来的好处。通过多种实现方法的比较,这...

    JAVA面向对象-多态(完结)

    JAVA面向对象---多态(完结)

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析.md

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析

    面向对象——多态实验报告.doc

    面向对象编程是Java的核心特性之一,它通过封装、继承和多态等概念来构建复杂的软件系统。本实验报告主要探讨了多态性这一关键概念,通过设计一系列类及其子类来实现具体的功能。 首先,实验设计了一个名为`Person`...

    C语言实现对象编程之多态代码.rar

    C语言实现对象编程之多态代码.rar 在C语言中还可以实现更深入的面向对象编程多态特性。例如:使用接口(interface)包含多个指向函数的指针,这样就可以实现操作的"多态性"。 在面向对象语言C++的实现上,使用了虚...

    面向对象练习之三--多态 (抽象方法和虚方法)

    在面向对象编程中,抽象方法和虚方法常常一起出现,它们共同构成了多态的基础。抽象类通常包含抽象方法,定义了一个通用的接口,而虚方法则允许子类对这些接口进行具体实现。通过这样的设计,我们可以创建出强大的...

Global site tag (gtag.js) - Google Analytics