重写和重载的区别
一、规则不同
1、重载规则:
①必须具有不同的参数列表。
②可以有不同的访问修饰符。
③可以抛出不同的异常。
2、重写规则:
①参数列表必须完全与被重写的方法相同。
②返回的类型必须一直与被重写的方法的返回类型相同。
③访问修饰符的限制一定要大于被重写方法的访问修饰符。
④一定不能抛出新的检查异常或者比道被重写方法申明更加宽泛的检查型异常。
二、类的关系不同
重写是子类和父类之间的关系,是垂直关系。
重载是同一个类中方法之间的关系,是水平关系。
函数重载的应用
(1)类的构造函数,通常就是函数重载的典型应用。因为一个类通常是可以有很多种构造方式的。
如QT里面的QString类的构造函数,提供了9种不同的构造函数,这9种构造函数的函数名完全相同,但是它们的参数类型或参数个数却不完全相同,因此是合法的。
(2)类的成员函数,如赋值函数等。
如VTK的vtkImageData类的两个成员函数就是重载的。
重载和重写的区别有以下几点:
一、定义上的区别:
1、重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。
2、覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。
二、规则上的不同:
1、重载的规则:
①必须具有不同的参数列表。
②可以有不同的访问修饰符。
③可以抛出不同的异常。
2、重写方法的规则:
①参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
②返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
③访问修饰符的限制一定要大于被重写方法的访问修饰符。
④重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。
三、类的关系上的区别:
重写是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。