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


【前言】

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


【正文】

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

 

 

 

下面用文字阐述一下:


一、对谁来用

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

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


二、用来干嘛

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

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


三、怎么用

用两个例子来展示一下:

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


重载例子:

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

<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>


      【总结】:

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


评论 81
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农胖虎-java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值