Overload是重载的意思(发生在同一个类中)。
Override是覆盖的意思,也就是重写(发生在父类与子类)。
Overload(重载)发生在同一个类中,方法参数必定不同。
因为发生在同一个类中,所以JVM想要分辨你想要调用的是哪个方法就必须限定你的这些方法是有区别的,该限定的方式就是方法的参数必定不同,参数不同指的是参数的个数或者类型不同或者顺序不相同。
注意:如果几个重载的方法的参数列表不一样,它们的返回者类型当然也可以不一样。如果两个方法的参数列表完全一样,不可以让它们的返回值不同来实现重载。
Override(重写)发生在父子类中,方法参数可以相同,子类方法的访问权限比父类更大,方法返回值的类型必须和父类相同(jdk1.4之前的限定)或者和父类返回值兼容的类型(jdk1.5之后的限定)。
其实个人觉得与其叫做父类子类,叫上下级类我觉得更贴切。因为子类重写方法时,子类方法的访问权限比父类更大,不能更小;子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常。还有一个问题是:如果重写时参数不同会发生什么情况?这个比较容易想通,因为子类继承父类,所以子类具有父类的方法,因为参数不同,所以发生参数不同的情况时为重载,不叫重写。
而异常之所以只能抛出比父类更少的异常是因为,子类可以解决父类的一些问题,不能比父类有更多的问题。
注意:如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
总结:override(重写,覆盖)
- 1、方法名、参数、返回值相同。
- 2、子类方法不能缩小父类方法的访问权限(可以扩大)。
- 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
- 4、存在于父类和子类之间。
- 5、方法被定义为final不能被重写。
overload(重载,过载)
- 1、参数类型、个数、顺序至少有一个不相同。
- 2、不能重载只有返回值不同的方法名。
- 3、存在于父类和子类、同类中。