【c#】重写和重载

来源:互联网 发布:短作业优先算法 编辑:程序博客网 时间:2024/04/28 14:41

初次看到这两个名词,感觉它们两个有着千丝万缕的联系似的,不过仔细一研究,发现它们的差异还是很大的。

通俗点说,重写就是改头换面,重新做人;重载就是给它加了个兄弟。

  

下面对比介绍一下重写重载


重写的规则:

1.在不同类中(有继承关系的类之间,一般用于派生类)。

2. 重写与被重写方法的相同点:参数列表、返回值、抛出异常,方法名   。  

3.重写与被重写方法的不同点:重写方法的访问修饰符>被重写的访问修饰符(public>package>protected>private);   方法体不同。

4.重写的基方法必须是virtual、abstract或override,不能重写非虚方法或静态方法。


override和new区别:

new声明的方法,子类调用,运行子类的函数,而如果类型是基类,被隐藏的基类函数就会被调用。

子类函数使用override,用子类的类型来调用,会运行子类的函数,类是基类的时候,仍会调用子类的函数。


举例:

(源自C#重载和重写的区别)


public abstract class BaseClass//定义一个抽象的虚类    {        public abstract void ShowInfo();//定义虚方法        public virtual void OutInfo()//定义抽象方法        {            Console.WriteLine("这是基类的虚方法!");        }    }    public class SonClass : BaseClass//实现抽象基类BaseClass    {        public override void ShowInfo()//重写基类的抽象方法        {            Console.WriteLine("重写基类的抽象方法");        }        public override void OutInfo()//重写基类的虚方法        {            Console.WriteLine("重写基类的虚方法");        }    }


重载的规则:

1.在同一个类中  

2.方法名必须相同  

3.参数列表不能相同,返回值可以相同可以不同      

4.任何一个父类的函数在其一个子类中只能被重写一次。



举例:

   class BillPayment    {        void PayBill(int telephoneNumber)        {            //此方法用于支付固定电话费        }        void PayBill(long consumerNumber)        {            //此方法用于支付电费        }        void PayBill(long consumerNumber, double amount)        {            //此方法用于支付移动电话话费        }    }


感受:

貌似相同,就要找不同点,为了留下深刻的印象;貌似不同,就要找相同点,减少知识量。生活就是学习,学习来源于生活。对学习的知识有一个感性的认识,感性的认识很容易让人接受,铭记,然后通过实践去理解理论,进行总结,最后创新是我们的终极目标。



PS:2015年8月17日

为什么用重写:

  子类可以对父类的方法进行重写,让自己拥有父类的属性,方法更加的灵活,实现了多态。

为什么用重载:

  方法重载可以再不改变原来方法的基础上,新增功能。提供了函数可扩展的能力。


重写和重载对比:

  作用域:重写(父类与子类),重载(方法之间)

  特点:重写(方法名相同) ,重载(方法名相同,参数不同)

  



 


0 0