【前言】
不知道大家的情况如何, 我在看到这一溜名词的时候就是想起了一句蔡依林的一句歌词——老虎、老鼠傻傻分不清楚。作为一名程序小白,在这几位老兄一同出现的那一刻,瞬间就患了脸盲症。不过不用担心,有病不要紧,关键咱有药呀。。
【正文】
首先是用导图来展示一些对比分析的思路。
下面用文字阐述一下:
一、对谁来用
重载:发生在一个类的几个同名方法上
重写:发生在父类与子类之间
二、用来干嘛
重载:让一个类中的一个方法,在接受参数类型不同时,产生不同效果
重写:一般使用重写是为了实现多态,就是在代码中用子类替代父类时,产生子类特有的效果。还不太明白的话,看下面的例子。
三、怎么用
用两个例子来展示一下:
(代码借鉴自《大话设计模式》)
重载例子:
首先我们默认小猫都是有名字的,所以有了第一个构造函数(参数为名字字段)。 但是我们有需要没有名字的小猫可以生成,所以重载了构造函数(没有参数)
<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>