- 为什么我们需要方法重载?
- 进行重载方法的不同方法
- 通过更改参数数量。
- 通过更改参数的数据类型
- 通过更改参数的顺序
- 当方法签名相同且返回类型不同时会发生什么?
- 重载方法根据作为参数传递给方法的参数的数量和类型进行区分。
- 我们不能使用相同的名称, 顺序和参数的类型定义多个方法。这将是编译器错误。
- 区分重载方法时, 编译器不考虑返回类型。但是你不能声明具有相同签名和不同返回类型的两个方法。它将引发编译时错误。
进行重载方法的不同方法方法重载可以通过更改来完成:
- 两种方法中的参数数量。
- 方法的参数的数据类型。
- 方法的参数顺序。
// Scala program to demonstrate the function
// overloading by changing the number
// of parameters
class GFG
{// function 1 with two parameters
def fun(p : Int, q : Int)
{
var Sum = p + q;
println( "Sum in function 1 is:" + Sum);
}// function 2 with three parameters
def fun(p : Int, q : Int, r : Int)
{
var Sum = p + q + r;
println( "Sum in function 2 is:" + Sum);
}
}
object Main
{
// Main function
def main(args : Array[String])
{// Creating object of GFG class
var obj = new GFG();
obj.fun( 6 , 8 );
obj.fun( 5 , 10 , 58 );
}
}
输出如下:
Sum in function 1 is:14Sum in function 2 is:73
通过更改参数的数据类型例子:
// Scala program to demonstrate the function
// overloading by changing the data types
// of the parameters
class GFG
{// Adding three integer elements
def fun(p : Int, q : Int, r : Int)
{
var Sum = p + q + r;
println( "Sum in function 1 is:" +Sum);
}// Adding three double elements
def fun(p : Double, q : Double, r : Double)
{
var Sum = p + q + r;
println( "Sum in function 2 is:" +Sum);
}
}
object Main
{
// Main method
def main(args : Array[String])
{// Creating object of GFG class
var obj = new GFG();
obj.fun( 6 , 8 , 10 );
obj.fun( 5.9 , 10.01 , 58.7 );
}
}
输出如下:
Sum in function 1 is:24Sum in function 2 is:74.61
通过更改参数的顺序例子:
// Scala program to demonstrate the function
// overloading by changing the
// order of the parameters
class GFG
{// Function 1
def fun(name : String, No : Int)
{
println( "Name of the watch company is:" + name);
println( "Total number of watch :" + No);
}// Function 2
def fun(No : Int, name : String )
{
println( "Name of the watch company is:" + name);
println( "Total number of watch :" + No);
}
}
object Main
{
// Main Function
def main(args : Array[String])
{// Creating object of GFG class
var obj = new GFG();
obj.fun( "Rolex" , 10 );
obj.fun( "Omega" , 10 );
}
}
输出如下:
Name of the watch company is:RolexTotal number of watch :10Name of the watch company is:OmegaTotal number of watch :10
当方法签名相同且返回类型不同时会发生什么?编译器将给出错误, 因为仅返回值不足以使编译器找出必须调用的函数。仅当两个方法都具有不同的参数类型(因此, 它们具有不同的签名)时, 方法重载才是可能的。
例子:
// Example to show error when method signature is same
// and return type is different.
object Main {// Main method
def main(args : Array[String]) {
println( "Sum in function 1 is:" + fun( 6 , 8 ) );
println( "Sum in function 2 is:" + fun( 6 , 8 ) );
}// function 1
def fun(p : Int, q : Int) : Int = {
var Sum : Int = p + q;
return Sum;
}// function 2
def fun(p : Int, q : Int) : Double = {
var Sum : Double = p + q + 3.7 ;
return Sum;
}}
编译时错误:
prog.scala:10:错误:对重载定义的模棱两可, 这两种方法都在对象Main类型的主方法中(p:Int, q:Int)Double和方法在对象Main类型的主方法中(p:Int, q:Int)匹配参数类型(Int, Int)和预期结果类型Any println("函数1的总和为:" + fun(6, 8)); ^ prog.scala:11:错误:对重载定义的含糊不清的引用, 两个方法都在对象Main类型的主方法中(p:Int, q:Int)Double和方法在对象Main类型的主方法中(p:Int, q:Int) Int匹配参数类型(Int, Int)和预期结果类型Any println("函数2的总和为:" + fun(6, 8)); ^ prog.scala:22:错误:方法fun被定义了两次冲突的符号, 都源自文件" prog.scala" def fun(p:Int, q:Int):Double = {^找到了三个错误
推荐阅读
- PHP json_decode()函数用法详细介绍
- CSS实现脉冲和阴影详细代码介绍
- 学习ReactJS之前必须了解的5大技能
- jQuery attr()方法用法介绍和代码示例
- 算法设计(查找数组中数字的出现频率)
- 使用C++ STL中的Set计算右侧较小的元素
- Python focus_set()和focus_get()方法用法介绍
- Amazon SDE实习面试经验
- 信息安全实现方法指南