A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

重写和重载有什么区别啊?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
重写是垂直方向的,也就是只有实现接口或者继承了父类才叫重写。而重载是水平方向的,一个类的的一个方法可以有多重表现形式,即不同参数。通过重载也是可以实现多态

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)
例子:
  1.   class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Circle pan = new Circle();
  6.             pan.CircleLength();
  7.             Console.WriteLine("pan的面积为{0}",pan.Area());

  8.             Wheel carWheel = new Wheel();//实例化一个wheel类的对象carWheel
  9.             carWheel.CircleLength();
  10.             Console.ReadKey();
  11.         }
  12.     }
  13.     public class Circle//定义一个circle(圆)的类
  14.     {
  15.         double Pi = 3.14;//定义Pi为double型,值为3.14
  16.         double r = 0.0;//定义半径并初始化

  17.         virtual public void CircleLength()//定义一个无返回值的方法,输出圆的周长
  18.         {
  19.             Console.Write("请输入圆的半径:r=");
  20.             r = double.Parse(Console.ReadLine());
  21.             Console.WriteLine("圆的周长为{0}", 2 * Pi * r);
  22.         }

  23.         public double Area()//定义一个返回值为double类型的方法,返回圆的面积
  24.         {
  25.             Console.Write("请输入圆的半径:r=");
  26.             r = double.Parse(Console.ReadLine());
  27.             return Pi * r * r;
  28.         }

  29.     }

  30.     public class Wheel : Circle //定义一个wheel类,继承自circle类,冒号前面是派生类,冒号后面是基类
  31.     {
  32.         string brand;//派生类中新增加的属性
  33.         public override void CircleLength()//重写CircleLength方法,要加override关键字
  34.         {
  35.             Console.Write("轮子的品牌是:");
  36.             brand = Console.ReadLine();
  37.             base.CircleLength();//base关键字是用来调用基类中的方法
  38.             Console.WriteLine("{0}牌轮子还不错!",brand);
  39.         }
  40.     }
复制代码
重载:
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。典型例子:Console.WriteLine()该方法就有18个重载函数,可以传人不同类型和不同个数的参数。
重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
1.重载是类内部函数(方法)之间的一种关系,而重写则是类与类(父类和子类)之间的一种关系。重载发生于一个类中,通过多个名称相同的方法(函数)实现,但参数不相同(数量不同、类型不同)。
2.重写就是子类可以重写父类的方法,它要求子类的方法名及 类型及数量 必须与父类一样,而且重写是发生在不同类中的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
重写和重载的区别:
重写:它存在与有继承关系的子类中,是在子类中重新定义父类具有相同方法签名的函数,使之有不同的实现.要理解重写和重载的本质区别,实现要理解什么叫做具有相同签名的方法.其实很简单,就是指相同的方法名,相同的参数列表(参数个数以及相同位置的参数类型相同)以及相同的函数返回值.重写的一个重要特征就是必须要求方法的签名相同.
重写的基本特征:
1.是一种运行时多态,又称为动态联编,只有在运行时才知道调用的是哪个方法.
2.存在于有继承关系的子类中,只有被virtual和abstract标记的虚方法和抽象方法才能被直接重写.
3.用关键字override来标记.
4.重写这个方法的类的父类中有一个与这个方法签名相同的方法

重载:其实是一种编译时多态技术,就是说在编译时就知道调用的是哪个方法,这其实很好理解,所谓重载就是在同一个类中的多个同名方法嘛,只是这些方法的参数类表不同(参数个数,或者是相同位置的参数类型不同)而已嘛,而返回值可以相同,也可以不相同,这些方法具有不同的方法签名,也就是说是不同的方法.从编译器的角度,不同的方法,就是不同的方法地址,在编译时就已经确定,是一种静态绑定.
重载的特征:
1:存在于同一个类中
2:具有相同的函数名,但参数列表不同,函数返回值类型可以相同也可以不同.

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
重载是不同的方法,只是方法名相同。重写是指的同一个方法。
private void A();
private int A () ;
private int A (int a);
这叫重载

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马