构造器可以重写吗? 为什么?
谁能把原理举例解释清楚啊
方法的重写
由于父类的方法不能够完成某种功能,但是还必须得调用这个方法,则子类可以重写这个方法,加强其功能。
在父类里面,如果一个函数可以让子类重写,必须在方法的返回类型前面用vritual关键来修饰。说明这个方法可以被
子类重写。
如果在子类里面,要重写父类的方法,则应在方法返回类型前面加上override关键字,说明这个方法是重写父类的。
重载
指的是函数的方法名相同,但是参数的类型,参数的个数,顺序不一样互为函数的重载。
http://www.cnblogs.com/QLJ1314/archive/2012/08/11/2633802.html 可以看看,可以加关注有问题再聊
重载是方法的参数不一样.
重写是对父类方法的重新实现.
构造函数没有这个概念.子类会自动调用其默认构造函数
(你可以求证一下)
重载是平行的。是一个类的内部的方法名称一样,参数列表不一样的多个方法,以实现不同的需求。
重写是垂直的。是子类对父类同名方法的重新实现,需要new关键字。
您好,new关键字不是初始化一个类的实例吗,怎么又是重写呢,不明白,请指点啊
@hunpo: 说错了,是override
http://www.cnblogs.com/tomin/archive/2009/03/18/1415755.html
@hunpo: 子类如果要覆盖父类的方法(例如public void A()),可以直接用相同的名字在子类再次声明public void A(),也可以public void new A()作为显式覆盖。你加不加new都会覆盖,但是加了new一来编译器不会有警告,而来也是一种比较文雅的做法,告诉自己和别人这是一个覆盖了父类的方法。
重写才用override。override只能重写父类中virtual的方法,而覆盖可以覆盖任何方法(也许不是任何=。=记不清了。。。)。
重载 : 子类可以子类可以有与父类方法名相同的方法 ,签名不同(即参数不同)
重写 : 是就虚方法而言的 常见的虚方法:ToString() ,Equals()换而言之就是他们都可以重写的
关于重载和重写的区别,建议你去园子首页搜索一下。很多相关文章,比较清晰的辨别两者的区别和用法。可以深入了解。
这两个概念完全没有关系
我的理解是:
重载是有几个方法恰好重名了,但这几个方法的区别就是参数不同,(也可以说是同名方法的不同的几个版本)使用时,可以由智能感知来判断,决定你到底是用哪个。
也就是说,这几个同名方法之间没有任何关系,只不过是同名。
重写:定义某个方法时就知道以后会要有不同的方式去完成本方法要实现的功能(即实现多态性),所以设计方法时就被故意设计为可被重写的(在基类中),声明方法是使用virtu关键字,这种方法被称之为“虚方法”。这样,你以后就可以在派生类里重写他,用overriding。(在派生类中)
也就是说,这几个方法签名,参数,可访问性都是相同的,不同之处就是它们可能适用于不同的派生类(这也是重写某方法的原因)。使用时,依旧是由智能感知来判断你到底使用哪个。
以上是我的理解,有不对的话请帮我指出来,谢谢!