【编程基础】程序小白脸盲症之重载、重写、多态

来源:互联网 发布:linux libc 源代码 编辑:程序博客网 时间:2024/06/06 20:44


【前言】

       不知道大家的情况如何, 我在看到这一溜名词的时候就是想起了一句蔡依林的一句歌词——老虎、老鼠傻傻分不清楚。作为一名程序小白,在这几位老兄一同出现的那一刻,瞬间就患了脸盲症。不过不用担心,有病不要紧,关键咱有药呀。。


【正文】

       首先是用导图来展示一些对比分析的思路。

 

 

 

下面用文字阐述一下:


一、对谁来用

 重载:发生在一个类的几个同名方法上

 重写:发生在父类与子类之间 


二、用来干嘛

 重载:让一个类中的一个方法,在接受参数类型不同时,产生不同效果

 重写:一般使用重写是为了实现多态,就是在代码中用子类替代父类时,产生子类特有的效果。还不太明白的话,看下面的例子。


三、怎么用

用两个例子来展示一下:

(代码借鉴自《大话设计模式》)


重载例子:

首先我们默认小猫都是有名字的,所以有了第一个构造函数(参数为名字字段)。 但是我们有需要没有名字的小猫可以生成,所以重载了构造函数(没有参数)

<span style="font-size:24px;">namespace ConsoleApplication2{    class cat    {        private string name = "";        public cat (string name )    //构造函数        {            this .name =name ;        }        public cat ()    //构造函数重载 ,,注意()参数不同类型哦。。          {            this .name ="无名";        }        public string Shout()        {            return "我的名字叫"+name +"喵";         }    }}   </span>


重写例子:

动物叫声大赛,猫和狗都要叫。

<span style="font-size:24px;">class Animal         //<span style="color:#ff0000;">Animal 类,猫狗的父类</span>    {        protected string name = "";        public Animal (string name )        {            this.name = name;         }        public Animal ()        {            this.name = "无名";         }        protected int shoutNum = 3;        public int ShoutNum        {            get            {                return shoutNum;            }            set            {                shoutNum = value;            }        }        public virtual string shout()    <span style="color:#ff0000;">//叫的虚方法。        {</span>            return "";        }} </span>


猫的实现

 

<span style="font-size:24px;"> class Cat : Animal    {        public Cat()            : base()        { }        public Cat(string name)            : base(name)        { }        public override string shout()  <span style="color:#ff6666;">//子类狗的方法重写</span>        {            string result = "";            for (int i = 0; i < shoutNum; i++)                result += "喵,";            return "我的名字叫" + name + "" + result;         }    }</span>


狗的实现

  

  class dog:Animal     {        public dog ():base()        {}        public dog(string name) : base(name)         { }        public override string shout()        {            string result="";            for (int i=0;i <shoutNum ;i++)                result +="汪,";            return "我的名字叫"+name +""+result ;        }    }

客户端代码:

<span style="font-size:24px;">ublic partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private Animal[] arrayAnimal;         private void button2_Click(object sender, EventArgs e)        {            arrayAnimal =new Animal[5];            arrayAnimal [0]=new Cat("小花");            arrayAnimal [1]=new dog ("阿毛");            arrayAnimal [2]=new Cat("娇娇");            arrayAnimal [3]=new dog ("小黑");            arrayAnimal [4]=new Cat ("咪咪");          }         private void button1_Click(object sender, EventArgs e)        {            foreach (Animal item in arrayAnimal )   <span style="color:#ff6666;"> //子类来替代父类 多态的实现</span>            {                MessageBox.Show (item.shout ());             }        }    }</span>


      【总结】:

重载在一个类中, 重写在子类父类中,多态通过子类替代父类由虚方法重写实现。。你分清楚了吗?


0 0
原创粉丝点击