重载与重写
面对重载与重写有时会像失忆一样,将这两个内容搞混。在实际运用中,我们一般是不会混的。但在给别人讲述的过程中,可能会出现张冠李戴将两个名词搞混,这是不利于传播的。让我们来一起加深一下:
重载:相同函数名称,不同参数或不同参数类型。举个例子:
class Oneclass {
public int count(int a,int b) { //两个正整数加法
return a+b;
}
public double count(double a,double b) { //带小数的两数相加
return a+b;
}
public double count(double a,string operate,double b) { //多位数的加减乘除运算
switch (operate) {
case “+”
return a + b;
case “-”
return a - b;
case “*”
return a * b;
case “/”
return a / b;
}
}
}
这三个类的count()方法就构成了重载关系。很容易就能得出对同一对象的同名方法的调用,正是依靠这参数的不同来区分调用的是哪一个方法。
重写:子类对父类方法的不同实现,即方法体(函数体)执行内容不同。
//父类:Animal
class Animal{
string food = “食物”;
public string eat() {
return this.food; //父类对eat()的实现
}
}
//子类1:Cat
class Cat extends Animal{
public string eat() {
return this.food = “老鼠”; //子类对eat()的新实现1
}
}
//子类2:Wolf
class Wolf extends Animal{
public string eat() {
return this.food = “羊”; //子类对eat()的新实现2
}
}
正是这种重写,实现了多态。
实际上,重载、重写都实现了多态。但重载是同一对象的同一函数名的不同本领;而重写则是虽然各子类对象具体相同的一个函数名,但各自因不同实现而不同。