zoukankan      html  css  js  c++  java
  • Csharp多态的实现(虚方法)

    1.什么是抽象类

    1.1虚方法是用virtual修饰,在子类中用override进行重写

    1.2虚方法是一个方法,放在类里面(可以再下面的代码中看到)

    1.3虚方法可以 重写,也可以不重写(这个可以再下面的代码中看到)

    2.多态的实现

    2.1什么都不说了,直接上代码,然后我在解释吧

    //先在命名空间下定义一个类,类里面放虚方法
     class Person
        {
            //类是指具有统一特征和行为的抽象,比如说电脑
            //对象是类的具体,比如说这个电脑,你眼前的这个电脑,具体的这个电脑
            //类中可以有字段,属性和方法
            private string _name; //字段
            public string name//属性
            {
                get
                {
                    return _name;
                }
                set
                {
                    _name = value;
                }
            }
            private float _height;
            public float height//属性
            {
                get
                {
                    return _height;
                }
                set
                {
                    _height = value;
                }
            }
            private int  _age;
            public int age//属性
            {
                get
                {
                    return _age;
                }
                set
                {
                    if(age<0)
                    {
                        _age = 0;
                    }
                    _age = value;
                }
            }
            private char _sex;
            public char sex
            {
                get
                {
                    return _sex;
                }
                set
                {
                    if(sex == '女'||sex == '男')
                        _sex = value;
                    else 
                        _sex = '男';
                }
    
            }
         
            public  virtual void say()//虚方法
            {
                Console.WriteLine("你好,我是一个人类,我叫{0}",_name);
            }
    
    //在定义一个Teacher类,继承Person,在子类中重写虚方法
     class Teacher:Person
        {
             private string _address;
             public string address//在子类中新增加的属性
             {
                 get
                 {
                     return _address;
                 }
                 set
                 {
                     _address = value;
                 }
             }
            public override void say()//虚方法重写
            {
               Console.WriteLine("我是一个老师,我叫{0}",name);
            }
    
    //在定义一个Student类,继承Person,在子类中重写虚方法
    class Students:Person
        {
            private int _stuId;
            public int stuId
            {
                get
                {
                    return _stuId;
                }
                set
                {
                    _stuId = value; 
                }
            }
          //  public  override void say() //虚方法可以重写,也可以不重写
          //  {
           //     Console.WriteLine("大家好,我是一名学生,我叫{0}",name);
           // }
        }
    

    2.2接下面来看看上面的代码,至于具体的语法这里就不细说了,都是基础的,今天主要看一下虚方法实现多态, 定义一个父类变量Person  p= new Students();     p = new Teacher(); 

    在这里我们可以运行代码看到,Person的对象p可以表现出Students类的特征或者Teacher的一些特征,这就是多态,子类表现出不同的形态.

    2.2.1 使用多态的时候,系统先检测父类中的方法是否有virtual关键字,即检查是否重写,如果没有重写直接调用父类中的方法,如果重写了,就会转到相应的子类中调用重写的方法

    2.2.2 在子类中新添加的属性,方法等,在用虚方法实现多态的时候,是调用不到的, 对于这个个人是这样理解的,因为子类是继承与父类的,所以子类里面的一些属性,父类里面是不存的,这样的话,在创建出子类对象然后转化为父类的时候,一些属性就用不了了

    2.2.3 父类里面先装了学生类,然后然后又装了老师类,  装了那个类的对象,父类就会表现是那个类的特征,从而实现多态

    Csharp多态的实现概述

  • 相关阅读:
    4.1.4协变和逆变 不常用
    4.1.33匿名方法Lambda语法
    4.1.1委托和广播
    1.4.3用户定义异常类
    1.4.2异常处理
    1.3.6接口判断及显式实现比较
    常用正则表达式
    git
    Pod 操作
    C语言指针的初始化和赋值
  • 原文地址:https://www.cnblogs.com/ZhiXing-Blogs/p/4958192.html
Copyright © 2011-2022 走看看