重载与重写
面对重载与重写有时会像失忆一样,将这两个内容搞混。
在实际运用中。我们通常是不会混的。
但在给别人讲述的过程中,可能会出现张冠李戴将两个名词搞混,这是不利于传播的。
让我们来一起加深一下:
重载:同样函数名称,不同參数或不同參数类型。举个样例:
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()方法就构成了重载关系。
非常easy就能得出对同一对象的同名方法的调用,正是依靠这參数的不同来区分调用的是哪一个方法。
重写:子类对父类方法的不同实现。即方法体(函数体)运行内容不同。
//父类: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 } }
正是这样的重写。实现了多态。
实际上,重载、重写都实现了多态。但重载是同一对象的同一函数名的不同本领;而重写则是尽管各子类对象详细同样的一个函数名。但各自因不同实现而不同。