黑马程序员技术交流社区
标题:
重写和重载有什么区别啊?
[打印本页]
作者:
职业规划-蔡红微老师
时间:
2012-4-9 17:21
标题:
重写和重载有什么区别啊?
重写和重载有什么区别啊?
作者:
何智杰
时间:
2012-4-9 17:31
重写是垂直方向的,也就是只有实现接口或者继承了父类才叫重写。而重载是水平方向的,一个类的的一个方法可以有多重表现形式,即不同参数。通过重载也是可以实现多态
作者:
黄国钢
时间:
2012-4-9 23:07
重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)
例子:
class Program
{
static void Main(string[] args)
{
Circle pan = new Circle();
pan.CircleLength();
Console.WriteLine("pan的面积为{0}",pan.Area());
Wheel carWheel = new Wheel();//实例化一个wheel类的对象carWheel
carWheel.CircleLength();
Console.ReadKey();
}
}
public class Circle//定义一个circle(圆)的类
{
double Pi = 3.14;//定义Pi为double型,值为3.14
double r = 0.0;//定义半径并初始化
virtual public void CircleLength()//定义一个无返回值的方法,输出圆的周长
{
Console.Write("请输入圆的半径:r=");
r = double.Parse(Console.ReadLine());
Console.WriteLine("圆的周长为{0}", 2 * Pi * r);
}
public double Area()//定义一个返回值为double类型的方法,返回圆的面积
{
Console.Write("请输入圆的半径:r=");
r = double.Parse(Console.ReadLine());
return Pi * r * r;
}
}
public class Wheel : Circle //定义一个wheel类,继承自circle类,冒号前面是派生类,冒号后面是基类
{
string brand;//派生类中新增加的属性
public override void CircleLength()//重写CircleLength方法,要加override关键字
{
Console.Write("轮子的品牌是:");
brand = Console.ReadLine();
base.CircleLength();//base关键字是用来调用基类中的方法
Console.WriteLine("{0}牌轮子还不错!",brand);
}
}
复制代码
重载:
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。典型例子:Console.WriteLine()该方法就有18个重载函数,可以传人不同类型和不同个数的参数。
重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
作者:
yoosou2012
时间:
2012-4-10 08:17
1.重载是类内部函数(方法)之间的一种关系,而重写则是类与类(父类和子类)之间的一种关系。重载发生于一个类中,通过多个名称相同的方法(函数)实现,但参数不相同(数量不同、类型不同)。
2.重写就是子类可以重写父类的方法,它要求子类的方法名及 类型及数量 必须与父类一样,而且重写是发生在不同类中的
作者:
刘真
时间:
2012-4-10 08:53
重写和重载的区别:
重写:
它存在与有继承关系的子类中,是在子类中重新定义父类具有相同方法签名的函数,使之有不同的实现.要理解重写和重载的本质区别,实现要理解什么叫做具有相同签名的方法.其实很简单,就是指相同的方法名,相同的参数列表(参数个数以及相同位置的参数类型相同)以及相同的函数返回值.重写的一个重要特征就是必须要求方法的签名相同.
重写的基本特征:
1.是一种运行时多态,又称为动态联编,只有在运行时才知道调用的是哪个方法.
2.存在于有继承关系的子类中,只有被virtual和abstract标记的虚方法和抽象方法才能被直接重写.
3.用关键字override来标记.
4.重写这个方法的类的父类中有一个与这个方法签名相同的方法
重载:
其实是一种编译时多态技术,就是说在编译时就知道调用的是哪个方法,这其实很好理解,所谓重载就是在同一个类中的多个同名方法嘛,只是这些方法的参数类表不同(参数个数,或者是相同位置的参数类型不同)而已嘛,而返回值可以相同,也可以不相同,这些方法具有不同的方法签名,也就是说是不同的方法.从编译器的角度,不同的方法,就是不同的方法地址,在编译时就已经确定,是一种静态绑定.
重载的特征:
1:存在于同一个类中
2:具有相同的函数名,但参数列表不同,函数返回值类型可以相同也可以不同.
作者:
白建新
时间:
2012-4-10 10:54
重载是不同的方法,只是方法名相同。重写是指的同一个方法。
private void A();
private int A () ;
private int A (int a);
这叫重载
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2