Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结

1. 方法签名

java中每个方法都有一个签名,包含方法名和参数列表(类型、个数以及顺序),只要其中一个不同,方法的签名不同,也就是属于不同的方法。但注意,签名不包含返回值类型,定义如下图。

Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结

 如下图,只要签名相同,就认为是同个方法,所以即使我们设置返回值类型不同时,会提示我们方法“topo(int)”已经被定义,所以在实际开发中不要出现签名相同,但返回值类型不同的方法

Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结

 

2. 方法重载(overload)

2.1 定义:同一个类中多个方法有相同的方法名,但是参数列表不同称作方法重载(不考虑修饰符和返回值类型)。

2.2 优点:可以调用同一个方法,传入不同参数实现相似的功能,便于程序员开发。

2.3 使用:在实现功能相似时,为了便于记忆,方便使用,考虑使用方法重载。

Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结

 

3. 方法覆盖或者方法重写(override、overwrite)

3.1 定义及使用:子类继承父类后,父类的方法功能满足不了子类的需求,子类有必要对继承的父类方法进行方法覆盖。父类的构造方法(不能被继承)以及private修饰的私有方法不能被覆盖,

3.2 构成方法覆盖:子类重写的方法和父类方法要有相同的方法名和参数列表;子类方法的返回类型要小于等于父类方法返回类型(也就是子类方法的返回类型不能是父类方法返回类型的父类);子类方法抛出的异常类型要小于等于父类方法抛出的类型;子类方法访问权限大于等于父类方法访问权限。口诀就是“两同两小一大”

 

3.3 以下是子类方法返回类型必须小于等于父类方法返回类型的示例。从代码可以看出子类方法返回类型Dog是父类方法返回类型Pet的子类时,覆盖成功;反之,编译器则报错:子类TestPro中的dko(int)方法和父类Pok的dko(int)方法冲突,尝试使用不兼容的返回值类型。

Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结  Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结  

3.4 以下是子类方法返抛出异常必须小于等于父类方法抛出异常的示例。首先,由于子类方法抛出两个异常DateTimeException和BindException是父类方法抛出一个异常Exception的子类,所以覆盖成功,所以异常只考虑是不是父类,而不是考虑异常数量的多少;反之,编译器则报错:子类TestPro中的dko(int)方法和父类Pok的dko(int)方法冲突,被覆盖的方法没有抛出java.lang.Exception。

Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结

Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结

 

3.5 以下是子类方法访问权限必须大于等于父类方法访问权限的示例。首先,当子类方法访问权限public大于父类方法访问权限private时,方法覆盖成功;反之,编译器则报错:子类TestPro中的dko(int)方法和父类Pok的dko(int)方法冲突,试图分配较弱的访问权限private,而父类方法是public。

Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结  Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结