面向对象——(5)方法重载
重载和方法重载
在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
方法重载,英文为overloading method,提供了创建同名的多个方法的能力,但这些方法需使用不同 的参数类型。
小结:方法重载就是方法名称重复,加载参数不同。
//对不同的数据执行相似的功能 class BillPayment { ... void PayBill(int telephoneNumber) { //此方法用于支付固定电话话费 } void PayBill(long consumerNumber) { //此方法用于支付电费 } void PayBill(long consumerNumber,double amount) { //此方法用于支付移动电话话费 } ... }
(1)在BillPayment支付账单类中,具有PayBill的方法。
(2)这三个方法方法名称相同,但括号中的参数不同,它们分别执行支付固定电话话费、电费、移动电话话费的功能。如果参数也相同,就没有任何意义了。
(3)方法重载就是对不同的数据执行相似的功能,比如上例中的支付各项费用的功能。
重写和方法重写
重写
1、重写,又叫覆写、覆盖,英文名称为override。
2、通常,派生类继承基类的方法,因此,在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现.
小例子:
假设动物类存在“跑”的方法,从中派生出马和狗,马和狗的跑得形态是各不相同的,因此同样方法需要两种不同的实现,这就需要“重新编写”基类中的方法.
3、"重写"基类方法就是修改它的实现或者说在派生类中重新编写。
方法重写
1、方法重写,又叫方法覆盖,是方法重载的一种特殊形式,在派生类中重新定义此虚函数时,要求方法名称相同、返回值类型以及参数列表中参数的个数、类型、顺序,都必须与父类中的虚函数完全相同。
2、在派生类中声明对虚方法的重载,要求在声明中加上override关键字,并且不能有new、static、virtual修饰符。
//定义基类A class A { int x; public virtual void PrintFields() { Console.WriteLine("x={0}", x); } } //派生类B class B : A { int y; //重写A类中的PrintFields方法 public override void PrintFields() { base.PrintFields(); Console.WriteLine("y={0}", y); } }
相关博客:《C#之多态》