方法重写和方法重载的区别
重载overloading
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数列表(参数个数或参数类型)
重载overloading是一个类中多态性的一种表现
java的方法重载,就是在类中可以创建多个方法名相同的方法,但是它们的参数列表必须不同,在调用方法的时候传递给它们的参数不同再决定具体调用哪个方法,这就是多态性!
方法重载的返回值类型可以相同也可以不同,无法以返回值类型作为重载函数的区分
重写和重载的规则:
方法重写的规则:
- 参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载
- 返回值类型必须与被重写方法的返回值类型相同,否则不能称其为重写而是重载
- 访问修饰符的限制一定要大于被重写方法的访问修饰符(public》protected》default》private)
- 重写方法一定不能抛出新的检查异常或者比被重写方法声明更广泛的检查型异常
方法重载的规则:
- 参数列表必须不同
- 返回值类型没有要求
- 可以有不同的访问修饰符
- 可以抛出不同的异常
重写和重载的特点:
重写(覆盖)override的特点:
- 覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果
- 覆盖的方法的方法的返回值类型必须和被覆盖的方法的返回值类型一致
- 覆盖的方法所抛出的异常必须和被覆盖的方法所抛出的异常一致,或者是其子类
- 被覆盖的方法不能为private,否则在其子类中只是定义了一个新的方法,因为private修饰的方法不能被继承
重载override的特点
- 在使用重载时只能通过不同的参数列表样式,参数类型、个数或顺序butong
- 不能通过访问权限、返回值类型、抛出的异常 进行重载
- 方法的异常类型和数目不会对重载造成影响
- 对于继承来说,如果某一方法在父类中的访问权限是private,那么就不能在子类中对其进行重载,因为没有被继承,多以只是定义了一个新的方法,没有达到重载的效果
总结:
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。