我们知道,方法的定义是由五个要素组成的,分别是修饰符、返回值类型、方法名称、方法参数以及方法体。那么将方法名称和方法参数放在一起,则称为这个方法的签名,简称方法签名。
在Java中,同一个类中两个不同的方法不可以出现相同的方法签名。也就是说方法签名是方法唯一的标识。如果相同那么就是同一个方法,Java不允许声明相同的方法,否则编译不通过。
1、方法的签名
将方法名称和方法参数放在一起,则称为这个方法的签名,简称方法签名。
2、方法的重载(Overload)
前面说的方法签名是指方法名称和参数列表的统称。如果同一个类中,两个方法的方法名称相同,但是参数列表不同,那么就规定这是方法的重载。
2.1、方法重载定义
在同一个类中,方法名称相同,参数列表不同,方法体不同,则称为方法重载。
在Java中,方法的重载是发生在编译期间的。编译器会在编译期间,将根据方法的参数列表自动绑定调用哪个方法。
所以重载归结为一句话:“重载看参数”。
2.2、方法重载的规则
方法的重载规则如下:
<1>方法名称必须相同,参数列表必须不同
<2>参数列表不同指的是参数个数、参数类型、参数类型位置的不同的,而不是指参数名称、参数位置不同。
<3>重载只和方法名称以及参数列表有关,与其他的无关。
<4>重载发生在同一个类中,或者子类中
3、方法的重写(Override)
3.1、重写的定义
方法的重写:发生在父子类中,方法名称必须相同,方法参数必须相同,方法体不同。
在Java中,方法的重写是发生在运行期间的。编译器会在运行期间,将根据调用方法的对象类型自动绑定调用哪个方法。
所以重写归结为一句话:“重写看对象”。
3.2、重写的规则
重写规则:“两同两小一大”。
<1>两同:方法名称相同,方法参数相同
<2>两小:返回值类型,子类小于等于父类返回值类型
返回值类型分为三种情况:void类型:当方法无返回值时,重写时候,父子类返回值类型必须相同,都为void类型。基本数据类型:当方法返回值是基本数据类型时,重写时候,方法的返回值类型必须一致。
引用数据类型:当方法返回值是引用数据类型时,重写时候,方法的返回值类型子类必须小于或等于父类的方法返回值类型。
注:由于SubFuncDemo是FuncDemo的子类,所以SubFuncDemo类型是小于FuncDemo类型的。
<3>两小:方法抛出的异常:子类小于等于父类抛出的异常
<4>一大:方法的访问修饰符:子类大于父类的访问修饰符
4、理解“重载看参数,重写看对象”
要理解“重载看参数,重写看对象”,看下面这道例题:
最终输出结果如下图所示:
综上,Java中方法的重载与重写介绍完了。