重载

概念

        方法重载就是让类以统一的形式处理不同数据的一种手段

多个同名方法同时存在,具有不同的参数个数/类型或者返回值类型,重载的时候,方法名要一样,但是参数类型和个数必须不一样,返回值类型也可以不一样,不能只有返回值类型不一样。无法以返回类型作为重载函数的区分标准

        重载是一个类中多态性的表现

重载的规则

                1.必须具有不同的参数列表(形参的数目,类型或是形参顺序)

                2.在参数列表不同的基础上,可以有不同的返回类型

                3.可以有不同的访问修饰符

                4.抛出不同的异常

重写

概念

        重写是子类对父类允许访问的方法进行重新编写,返回值和形参数量和类型都不能改变,几外壳不变,核心重写

        如果父类方法子类无法被访问,则子类不能重写该方法(如父类方法被private修饰符修饰)

重写的规则

方法重写可以用“一个前提,三个相同和两个规定”

        一个前提:是在继承的体系结构下

        三个相同:子类的方法和父类的方法

                1.有相同的方法名

                2.相同的参数列表(形参数量和类型)

                3.相同的返回值

                        这里需要注意,JAVA5之前返回值必须一样,但是之后可以让重写的返回值范围小于等于父类

        两个规定:

                1.子类的方法范围限定不能比父类方法的范围小(public>protect>default>private)

                2.不能抛出更多异常(例如父类声明异常为IOException,子类重写方法不能抛出Exception)

重载和重写的区别

相同

两者都体现了多态性

不同

1.概念上

        重载是同一个类对于同名方法的不同定义

        重写是子类对父类同名方法的重新定义

2.参数列表和返回值上

        重载的方法名一定相同,参数列表(形参的数目,类型或是形参顺序)一定不相同,返回类型可以不相同

        重写的方法名一定相同,参数列表(形参的数目,类型或是形参顺序)一定相同,返回类型一定相同

3.位置上

        重载是同一个类中进行

        重写是存在于子类和父类之间

4.多态性的实现上

        重载体现的是编译上的多态性

        重写体现的是运行上的多态性