重载和重写有什么区别

Python011

重载和重写有什么区别,第1张

重载和重写属于Java面向对象中多态基础知识点,下面就给大家说说多态。

什么叫做多态?

多态指的是在继承关系中子类继承父类的行为,这种行为在子类具体实现时可以是不一样的。比如动物这一父类中有move()方法,在鸟类子类中和鱼类子类中move的实现是不一样的。在Java中多态是通过重写(@Override:把父类的方法重新实现)和重载(@Overload:通过方法参数的不同在子类中来重新创建名字相同的方法)来实现的。

重写:

重写(Override)是父类与子类之间多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Override)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。

重载:

重载(Overload)是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法,它们参数列表不同,则称为方法的重载(Overload)。

1、概念不同

重写:重写也就是我们通常所说的覆盖,重写是指在派生类当中,重新对基类中的虚函数度重新实现。

重载:重载指的是不用的函数使用相同的函数名字,可是,函数的参数、个数或者是类型都不同。

2、规则不同

重载:

重载可以有不同的访问修饰符。

重载能够抛出不同的异常。

重载一定要有不同的参数列表。

重写:

重写访问修饰符的限制一定要大于被重写方法的访问修饰符。

重写的参数列表一定要完全和被重写的方法相同,专否则的话不能称其为重写而是重载。

重写返回的类型一定要一直和被重写的方法的返回类型相同,否则不能称其为重写而是重载。

重写方法一定不可以抛出新的检查异常或者是比被重写方法申明更加宽泛的检查型异常。

3、类的属关系不同

重写:重写是垂直关系,是子类和父类之间的关系。

重载:重载是水平关系,是同一个类中方法之间的关系。

1.定义区别:

①重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。

②覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。

2.类的关系区别

覆盖是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。

3.产生方法区别

覆盖只能由一个方法或只能由一对方法产生关系;重载是多个方法之间的关系。

4.参数列表要求区别

覆盖要求参数列表相同;重载要求参数列表不同。

5.调用方法区别

覆盖关系中,调用方法体是根据对象的类型来决定;而重载关系是根据调用时的实参表与形参表来选择方法体的。

参考资料:百度百科-重载

参考资料:百度百科-重写