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