Java中的override和overload

一、override(重写)
在Java中,子类无条件继承父类的所有属性和方法。若父类中的被重写函数体不为空,则说明该方法对大多数子类型来说是可以被复用的。若父类中的某个函数实现体为空,则说明他的所有子类都需要重写这个方法。在子类中重写的方法各有差异(DRY原则)。
重写的方法具有相同的函数名、相同的参数列表或签名,以及相同的返回类型。实际执行时调用哪个方法时在运行时决定的(dynamic checking)。
在子类中,若想调用父类中已被重写的方法,需要在前面加上super关键字加以区分。
注意:
1.在重写父类的方法时,不应改变方法的本来意图。
2.声明一个变量时,使用抽象类可获得更好的复用性。在抽象类中,我们可以定义一些方法,它们的函数体可以为空,也可以不为空。当我们需要改变程序中变量的类型(但它们都继承自同一个抽象类)时,这种做法可以减少改动代码的工作量。
3.final和private方法不能被重写,但不影响子类中重新定义一个同名方法。
4.子类中重写的方法的spec必须强于父类中的同名方法。

二、overload(重载)
通过重载,我们可以定义一系列方法,它们具有相同的名称和不同的参数。这里“不同的参数”指的是参数的个数、类型都可以不同,并且至少其中之一发生了变化。返回值的类型,则可以改变也可以不改变。但是,如果只改变返回值的类型,则不是合法的重载。
重载的类型检查是在编译阶段完成的(static type checking)
重载可以在一个类内,也可以在子类中进行。

重写和重载的区别

重写 重载
参数列表必须相同 参数列表必须不同
返回类型必须相同 返回类型可以不同
异常不可增加(子类中重写方法的spec必须强于父类) 异常可以不同
合法输入不可增加限制(子类中重写方法的spec必须强于父类) 合法输入的条件可以不同
类型检查发生在运行时 类型检查发生在编译时

总结
重写和重载都是面向对象编程(OOP)中常用又有效的方法。使用这两种方法时,应符合"Don’t repeat yourself"(DRY)原则。这两种方法为面向可复用性的编程提供了便利。学习重写和重载也可以帮助理解public、private和final等与作用域相关的关键字。

可能有错误和欠缺,欢迎各位指点一二。

你可能感兴趣的:(Java中的override和overload)