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多态的实现概述

转载于:https://www.cnblogs.com/ZhiXing-Blogs/p/4958192.html

你可能感兴趣的:(Csharp多态的实现(虚方法))