首页 > 代码库 > 重载与重写
重载与重写
因为名字上的相似,我总是搞不清重载和重写的区别,我以前用过得究竟是重载还是重写我也不清楚.这两个放在一起比较的原因就是,名字上总是混为一谈.
现在总结现在区分一下还为时不晚,也两个东西可能没有什么对比性,单单只是名字相似,但是就是因为名字相似,当自己用的时候总是说,恩,这里用到了重载,哦,不是是重写。哎呀,知道就行了,爱叫啥叫啥吧。
方法重载:提供了创建同名的多个方法的能力,但是这些方法需要使用不同的参数类型.
注意:方法重载的时候,两个方法名相同,但是参数类型或个数必须要有所不同.优点:可以在不改变原方法的基础上新增功能,多以它的可扩展能力好.
例如:
class Cat { Private string name=""; '声明Cat类的是由字符变量name Public cat(string name) '定义Cat类的构造方法,参数是输入一个字符串 { This.name=name; ’将参数赋值给私有变量name } Public Cat() '将构造方法重载 { This.name="无名"; } Public string Shout() { Return "我的名字叫"+name+"喵"; } }
这样运行出来以后就是:我的名字叫无名喵。
理解了重载,接下来就是重写了。首先要知道什么是重写。
重写:子类可以将父类实现替换为他自己的实现,这个方法就是重写。
下面就来具体再回顾一下重写吧。
在机房重构里,组合查询窗体有好几个,所以一样的代码太多了,爽快一下就用了一下模板方法,然而这里就用到了重写。
先了解一下模板方法,小蔡说过:没有学过设计模式,那么对于多态,乃至面向对象的理解多半都是肤浅和片面的。
模板方法:
定义一个操作中的短发的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可冲定义该算法的某些特定步骤。
所以结合设计模式去理解会更好的。
接着谈我的机房重构,因为组合查询的几个窗体的相同之处有很多,所以代码也是一样的,太多的重复代码必然是不好的,所以我就建立一个父窗体作为模板,这样就把不变的只写一遍,在子类中实现与父类不同的方法。其实用的就是继承。
子类以自己的方式实现父类的功能(方法重写)
例如:我们在父窗体里写好相同部分的代码,但是每个窗体需要的数据库的表都不一样,这怎么办,就在父窗体里面定义好虚函数。
Protected Overridable Function GetTable() As String Return "" End Function
在子窗体里重写,比如学生基本信息里面,需要获取T_Student表,就在子窗体里重写子。
'定义虚函数的GetTable,获取不同的数据库的表名 Protected Overrides Function GetTable() As String <span style="white-space:pre"> </span>groupInquire.GetTable = "T_Student" '获得继承窗体所需要的表 Return groupInquire.GetTable End Function
这就是方法重写,通过总结,其实这两个东西有啥可比性啊,就因为名字相似,总是混为一谈,这里的混为一谈是当自己用的时候不确定自己用的叫什么,总是含糊的过去了。这俩个东西差距可大,不能含糊,总结一下,区分一下,自己以后就可以肯定的回答这是重载还是重写了。
其实,没有什么是不能放到一起比较着学习的,嘿嘿。懂了是关键啊。
重载与重写