多态(POLYMORPHISM),重写(OVERRIDE),重载(OVERLOAD)
这几个概念还真是容易混淆。多态(polymorphism),重写(Override),重载(overload)
也有把override译为重载的。
关于override和overload的翻译,好像不是很统一。
更多的应该是:
重写(override)和重载(overload)
重写(也可以译为overwrite)是基于子类对于父类的方法来说的,而重载呢,则是基于本身这个类里面的方法来说的。
一个类可以当继承另外一个类的时候,他就拥有了其父类所有的属性和方法,这个时候,他的一个实例同时也是父类的实例,因为他是一个父类,就如,Dog类继承了Animal类以后,d 这个Dog同时也是Animal这个类一样的。
如果说Animal类里面有一个方法是run(),这个run方法比较简单,只是简单得形容一下一般的动物是怎么run();显然Dog类对于这个写法是不满意的,要对其进行重新描述,于是就重新写了一个run方法,形容一只狗跑的时候是什么样子的。这样这个run方法就更适合于Dog类。那么这个run方法就是对Animal类里面run的重写(override)
然而,这种run还是不能满足要求,狗在run的时候可能是有状态的如果它是因为看见一只老鼠才run的呢?于是需要写一个同样的run将这种状况包含进去,那么我们就使用这样一种技术叫做重载(Overload),写了一个方法run(Mouse m)告诉别人当一只狗在看见一只老鼠时是怎么跑的,这就是重写。
那么这里面有没有什么需要注意的地方呢?
答案是有的:
1、重写是override 而重载是overload。两者写法不一样
2、override是针对父类同名同方法签名的方法写的,而overload是针对一个类里面同方法名,不同的方法签名的方法来写的。
3、override的外形和父类完全一样只是大括号里面的实现不一样,而overload除了方法名一样其他的不能都完全一样。