java中方法的重载和重写

一、方法的重载(Overload)

概念:

重载(overloading) 是在一个类里面,方法名字相同,而参数列表(个数、类型、参数排列顺序等)不同。返回类型可以相同也可以不同。

注意

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

最常用的地方就是构造器的重载。

重载规则:

a.方法名称必须相同;
b.参数列表必须不同(个数、类型、参数排序顺序不同等);
c.方法的重载和返回值类型无关,和权限修饰符也无关;
d.可以声明新的或更广的检查异常;
e.方法能够在同一个类中或者在一个子类中被重载;
f.方法的返回类型可以相同也可以不相同;
g.无法以返回值类型作为重载函数的区分标准。

 

二、方法的重写(Override)

概念:

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

好处:

重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。

注意:

重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常;

在面向对象原则里,重写意味着可以重写任何现有方法。

重写规则:

参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected;
父类的成员方法只能被它的子类重写;
声明为final的方法不能被重写;
声明为static的方法不能被重写,但是能够被再次声明;
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法;
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法;
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以;
构造方法不能被重写;
如果不能继承一个方法,则不能重写这个方法。

 

三、重写与重载的区别总结

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

一句话概括:
都体现了多态(方法和对象具有多种形态)
重载(overloading):本类中,方法名相同,形参列表不同
重写、覆盖(overriding):父子类(不仅限于直接父子)中,方法名相同,形参列表相同,返回值要么相同要么是父的子类
a.方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
b.方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
c.方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

 

重写:两同两小一大原则:

  1. 两同:方法名和参数列表相同
  2. 两小:返回值或声明异常比父类小(或相同)   
  3. 一大:访问修饰符比父类的大(或相同)

四、图解

 

posted @   不识人间烟火的你  阅读(300)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示