Java中的方法重载
Java中方法重载的概念是,一个类可以有多个具有相同名称的方法,只要它们的参数构造不同即可。
方法重载类似于构造函数重载,在这里我们可以实现多个构造函数(也具有相同的名称),只要这些构造函数具有不同的参数构造。
Java中的方法重载
方法名称应完全相同。
Java区分大小写,因此两个名称为foo()的方法
和fOO()
完全不同,并且不会在Java中发生方法重载。重载方法之间的区别是参数。
重载的方法应具有不同的方法参数。
例如,不同数量的参数,不同参数的数据类型等。方法返回类型对于重载没有意义,java编译器将抱怨类中的重复方法。
方法参数名称在方法重载中没有意义。
因此就Java而言,foo(int index)
和foo(int i)
是相同的。方法重载也称为编译时多态。
在Java的OOPS概念上了解更多信息。
让我们看一下Java中方法重载的一些示例。
Java示例中的方法重载
上面的代码段显示了方法重载的经典示例。
在GetAverage
类下声明了两个gatherInput()
方法。
在通常情况下,java编译器会显示错误:类型GetAverage中的重复方法collectInput()。
但是,在这种情况下,我们看到两个方法具有不同的参数列表,这使得在Java中这种方法是允许的。
方法重载为permissible的实例参数数量:给定重载方法的参数数量,允许在类内进行方法重载不一样。参数数据类型:如果每个重载方法中的至少一对参数具有不同的数据类型,则在类内允许方法重载。
参数的顺序:类中允许方法重载,因为重载方法的数据类型变量的顺序不相同。
不允许方法重载的实例
- 方法返回类型:对于具有相同参数列表但方法返回类型不同的方法,该类中禁止方法重载。
请记住,重载侧重于参数,而不是返回类型。
上面的代码将产生编译器错误:类型为GetAverage的重复方法collectInput(int,double)。
Java类型推广
类型提升是一个Java概念,其中将较小等级的数据类型提升为较高等级的数据类型。
下图说明了数据类型大小提升顺序:
从上图可以看出,字节可以提升为短。
Int数据类型具有三种可能的提升:double,long或者float。
Java中的类型提升和方法重载
类型提升与Java中的方法重载齐头并进。
在传递的值与建立的任何参数数据类型不一致的情况下,类型升级扩展了方法重载的逻辑,以决定使用哪种重载方法。
注意:如果找不到匹配的数据类型,则将通过的值数据类型自动提升为下一行(请参见上图)。
让我们研究一下Java中类型提升和重载的一些示例。
类型提升示例1:
输出:10类型long在重载的add()方法中传递了两个整数。
由于没有重载方法拥有(int,int)参数,因此传递的值将被提升为最接近的较大类型,即long。类型提升示例2:
输出:10.0类型float这里是int的最接近的较大类型是float,因此输出。类型提升示例3:
这里的Java编译器将产生错误,因为类型TypePromotionExample的add(double,int)方法不明确。
这是因为这两种方法均适用,并且任何一种方法都必须执行类型转换,所以Java编译器无法决定要使用哪种方法。