面向对象——(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#之多态》

posted @ 2014-02-16 11:17  Sherry&Yang  阅读(205)  评论(0编辑  收藏  举报