重载
概念
方法重载就是让类以统一的形式处理不同数据的一种手段
多个同名方法同时存在,具有不同的参数个数/类型或者返回值类型,重载的时候,方法名要一样,但是参数类型和个数必须不一样,返回值类型也可以不一样,不能只有返回值类型不一样。无法以返回类型作为重载函数的区分标准
重载是一个类中多态性的表现
重载的规则
1.必须具有不同的参数列表(形参的数目,类型或是形参顺序)
2.在参数列表不同的基础上,可以有不同的返回类型
3.可以有不同的访问修饰符
4.抛出不同的异常
重写
概念
重写是子类对父类允许访问的方法进行重新编写,返回值和形参数量和类型都不能改变,几外壳不变,核心重写
如果父类方法子类无法被访问,则子类不能重写该方法(如父类方法被private修饰符修饰)
重写的规则
方法重写可以用“一个前提,三个相同和两个规定”
一个前提:是在继承的体系结构下
三个相同:子类的方法和父类的方法
1.有相同的方法名
2.相同的参数列表(形参数量和类型)
3.相同的返回值
这里需要注意,JAVA5之前返回值必须一样,但是之后可以让重写的返回值范围小于等于父类
两个规定:
1.子类的方法范围限定不能比父类方法的范围小(public>protect>default>private)
2.不能抛出更多异常(例如父类声明异常为IOException,子类重写方法不能抛出Exception)
重载和重写的区别
相同
两者都体现了多态性
不同
1.概念上
重载是同一个类对于同名方法的不同定义
重写是子类对父类同名方法的重新定义
2.参数列表和返回值上
重载的方法名一定相同,参数列表(形参的数目,类型或是形参顺序)一定不相同,返回类型可以不相同
重写的方法名一定相同,参数列表(形参的数目,类型或是形参顺序)一定相同,返回类型一定相同
3.位置上
重载是同一个类中进行
重写是存在于子类和父类之间
4.多态性的实现上
重载体现的是编译上的多态性
重写体现的是运行上的多态性