一、定义
1.重载
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同参数个数/类型。重载Overloading是一个类中多态性的一种表现。
java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就是多态性。
重载时,方法名要一样,参数类型或个数不一样,返回值类型可以相同也可不同。无法用返回值类型在作为重载函数的区分标志。
2.重写
父类方法被默认修饰时,只能在同一包中,被其子类重写,如果不在同一包中则不能重写。
父类的方法被protected时,不仅在同一包中,被其子类重写,还可以不同包的子类重写。
重写方法规则
1.参数列表相同,否则是重载
2.返回类型必须一直与被重写方法相同,否则不是重写而是重载
3.访问修饰符限制一定大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:父类的一个方法声明了了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOEXception的子类异常,可抛出非检查异常。
重载方法规则:
1.具有不同的参数列表;
2.不同的返回值类型,只要参数列表不同就可以了;
3.可以有不同的访问修饰符;
4.可以抛出不同的异常;
重载和重写(覆盖)的特点:
Override:
1.覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2.覆盖的方法的返回值必须和被覆盖的方法的返回值一致;
3.覆盖方法所抛出的异常必须和被覆盖的方法的异常一致,或者是其子类;
4.被覆盖方法不能是private,否则在其子类中只是定义了一个方法,并没有进行覆盖;
Overload的特点:
1.在使用重载时只能通过不同的参数样式。例如,不同的类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但不能是(int,int));
2.不能通过访问权限、返回值类型、抛出的异常进行重载;
3.方法异常类型和数目不会对重载造成影响;
4.对于继承来说,如果某一方法的父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
总结
Override(重写)
1.方法名、参数、返回值相同
2.子类方法不能缩小父类的访问权限
3.子类方法不能抛出比父类更多的异常(子类方法可以不抛出异常)
4.存在于父类与子类之间
5.方法被定义为final不能被重写
Overload(重载)
1.参数类型、个数、顺序至少有一个不同
2.不能重载只有返回值不同的方法名
3.存在于父类和子类、同类中