C#多态实现之抽象类

来源:互联网 发布:php中文网站模板下载 编辑:程序博客网 时间:2024/06/07 12:10

示例:

控制台应用程序中,“Program.cs”类文件中源码:

定义抽象类关键字:abstract

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace _02抽象方法实现多态{    //3种方法实现多态之抽象类    //virtual,子类重写父类中的方法。    //abstract,子类重写父类中的方法。    //接口,实现接口的类,将接口中的方法实现。    //做网站的公司(抽象类)  你给我活我去开发网站,但是网站需要一部分flash,我公司力都是程序员(抽象类中有实现的方法)。    //没人会做flash(抽象方法),于是我把做flash这部分工作给其它公司去做(重写抽象方法的类)    //多态性的含义:使得能够利用基类的指针来引用不同子类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。    //多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。(多态)    //如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,采用虚方法来实现多态;    //如果父类中没有默认实现,父类也不需要被实例化,则可将该类定义为抽象类。    //主程序    class Program    {        static void Main(string[] args)        {            Chinese cn = new Chinese();            cn.Show();            Console.ReadKey();            //**抽象类是不能被实例化的。(抽象类的作用就是为了让继承。)**            //Person p = new Person();        }    }    //1.这个类也必须标记为abstract(抽象)的。    //2.抽象成员必须写在抽象类中。不能写在一个实例中。    //3.抽象类中一定有构造函数。虽然不能被实例化    public abstract class Person    {        //4.在抽象类中可以包含实例化成员        public string Name        {            get;            set;        }        //5.可以包含抽象方法、属性、索引器、事件。【这几个最终都是方法】        //6.Age为抽象属性,没有任何实现,区别于自动属性Name        public abstract int Age        {            get;            set;        }        public void SayHi()        {            Console.WriteLine("我不抽象....");        }        //7.抽象方法不能有任何方法体。(不能有任何实现 {这里面的内容} )        //8.抽象成员不能是private        public abstract void Show();        //{        //}    }    public class Chinese : Person    {        //9.父类中的抽象成员,子类继承以后必须重写所有抽象成员(例外:除非子类也是一个抽象类。)        public override int Age        {            get            {                throw new NotImplementedException();            }            set            {                throw new NotImplementedException();            }        }        public override void Show()        {            Console.WriteLine("我是中国人!!");        }    }    public abstract class Japanese : Person    {        //抽象类中,可以不对父类的抽象方法、抽象属性进行重写    }}

输出结果如下: