Java的方法签名

方法签名(Method Signature)是指方法名称和参数表组成的方法标识符,它基本上决定了一个方法的外部行为和属性。正确理解方法签名的概念,对于使用和实现方法尤其是涉及到方法重载和覆盖的时候非常重要。

方法签名包含以下几个部分:

方法名称
方法名称是标识一个方法的基本方式,遵循变量命名规则,不能包含空格或特殊字符,通常使用驼峰命名法等。方法名应该能反映出方法的作用,尽量起 expressive 的名称。

参数列表
参数列表用于定义方法输入的参数,包含多个参数的类型、顺序和个数。参数可以有多个,也可以没有参数。参数类型可以是原始类型,也可以是对象引用类型。参数应该按功能顺序正确排列,相同类型可以连续声明。

返回值类型
返回值是方法执行后返回的结果数据类型。可以是原始类型,对象引用类型,也可以是void表示没有返回值。返回值类型应该与方法功能相匹配。

那么方法的签名就是由方法名、参数列表和返回值类型3部分组成。例如:


int sum(int a, int b)
这个方法签名为:

方法名:sum
参数表:(int, int)
返回类型:int

所以整个签名可表示为:

sum(int, int): int

方法签名必须唯一,也就是说在一个类中不能定义两个方法名和参数都相同的方法。方法签名决定了方法的外部视图,调用这个方法需要遵循的语法。

方法签名与方法实现(方法体内具体代码逻辑)是分离的,签名决定调用语法,方法体是内部实现。

这也是重载(overloading)和覆盖(overriding)的区别,重载是签名不同,覆盖是签名必须相同。

对于方法重载,类中可以有多个同名方法,只要参数列表不同即可视为新方法,编译器会根据参数匹配来区分。例如:


int sum(int a, int b) {...}
double sum(double a, double b) {...}
这两个方法都是sum,但是参数列表类型不同,所以可以共存,调用时根据参数类型会调用不同版本的sum。

而对于方法覆盖,因为存在继承层级,子类可以覆盖父类的方法来改变实现逻辑,但需要保持方法签名相同,这样调用语法对用户来说是一致的。

例如:


//父类
public class Parent {
  public void method(int a) { ... }
}

//子类 
public class Child extends Parent {
  @Override
  public void method(int a) { //实现逻辑不同,但签名相同
    ...
  } 
}
所以方法签名决定了方法的外部视图和调用语法,非常重要。

总结方法签名的一些主要特点:

包括方法名、参数表、返回值类型
唯一标识一个方法
决定了方法的调用语法
方法重载根据签名区分不同方法
方法覆盖需要保持签名一致
那么为什么方法签名这么重要呢?主要有以下几个原因:

调用方需要依赖签名来使用方法,签名一致调用语法相同

实现可以修改而不影响调用方,遵循开闭原则

子类覆盖父类方法参数和返回值需要相同,保证一致性

重载可以实现多种格式方法,使用更灵活

编译器依赖签名来区分重复方法定义

文档注释和工具根据签名组织文档

继承关系稳定,方法作用明确

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值