一、基本概念
重写
覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。
注:重写是为了增强类的重用性和复用性,扩展性;重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西提高代码灵活性,容易修改
重载
重载是指不同的函bai数使用相同的函数名,但是函数的参du数个数或类型不同。调用的zhi时候根据函数的参数来区别不同的函数。
二、区别
1、类的区别
覆盖是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。
2、产生方法
覆盖只能由一个方法或只能由一对方法产生关系;重载是多个方法之间的关系。
3、参数列表要求
覆盖要求参数列表相同;重载要求参数列表不同。
4、调用方法
覆盖关系中,调用方法体是根据对象的类型来决定;而重载关系是根据调用时的实参表与形参表来选择方法体的。
三、规则
1、重写
(一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。
(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。
(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。
(四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。
(五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。
2、重载
(一) 被重载的方法必须改变参数列表;
(二) 被重载的方法可以改变返回类型;
(三) 被重载的方法可以改变访问修饰符;
(四) 被重载的方法可以声明新的或更广的检查异常;
(五) 方法能够在同一个类中或者在一个子类中被重载