长沙建设品牌网站,qq上传空间wordpress,wordpress图表模板类,企业做网站价钱文章目录 方法重载 overload方法签名返回值不属于方法签名的原因#xff1a; 重载的参数匹配规则 方法重载 overload
多个方法功能很相似#xff0c;但不完全一样#xff0c;可以考虑使用方法的重载。
同一个类中#xff0c;方法可以重名#xff0c;但是签名不可以重复。… 文章目录 方法重载 overload方法签名返回值不属于方法签名的原因 重载的参数匹配规则 方法重载 overload
多个方法功能很相似但不完全一样可以考虑使用方法的重载。
同一个类中方法可以重名但是签名不可以重复。一个类中如果定义了名字相同签名不同的方法就叫方法的重载。
方法签名
方法签名方法名 依次参数类型。
注意 返回值不属于方法签名。是依次的参数类型参数名是没有影响的只和参数的数据类型有关。比如 buy(String food, double weight) 与 buy(String food, double price) 是同一个方法签名。参数类型的排列顺序如果调换了就不是同一个方法签名比如 buy(String food, double weight) 与 buy(double weight, String food) 是两个不同的方法签名 。 方法签名是一个方法在一个类中的唯一标识。 返回值不属于方法签名的原因 因为调用方法时只使用到方法名和参数如果存在两个方法名和参数都类型相同但返回值类型不同的方法java就不知道到底是调用哪个方法。因此方法签名并不包括返回值。方法签名是 java 在调用方法时用来识别唯一方法的。 重载的方法可以调用别的重载方法也可以调用别的不重载的方法。
public double buy(){return buy(1); // 调用别的重载方法
}public double buy(int count){return buy(count,false); // 像这里补充部分缺省的参数值false然后调用重载的方法是重载的重要的使用场景。
}public double buy(int count, boolean isViIP){xxx;
}
重载的参数匹配规则
方法调用时传入的参数实际上并不一定要和方法定义的形参的数据类型严格相同只需要能实现自动类型转换即可。
// 类中方法
public double buy(double count){System.out.println(buying count);
}// 调用
a.buy(3); // int 可以自动转换为 double重载方法的调用当然也是符合这个逻辑的但会优先匹配参数类型与方法签名中形参类型一致的方法。
// 类中方法
public double buy(double count){System.out.println(buying count);
}
public double buy(int count){System.out.println(buying count !);
}// 调用
a.buy(3); // 优先会调用 buy(int count)// 假如用 short 调用呢
short ab 3;
a.buy(ab); // 优先还是会调用 buy(int count)
即自动类型转换的参数匹配也会匹配自动类型转换类型精度上最近的那个类型。 byte、short、int、long、float、double 当然是往右的最靠近而不是往左边靠近。因为自动类型转换本来就只能往更大/精度更高的数据类型去自动转换。 并且实际上虽然 java 支持这种规则但程序员编写代码时尽量不要让这种情况出现甚至故意这么做因为即便 java 自己本身清楚怎么去调用但程序员可能会被自己搞蒙掉。 带泛型类型参数的方法重载 若方法重载还涉及到形参为泛型的情况优先级先找确定类型按确定类型的参数类型匹配规则找都找不到才会最后去调用形参为泛型的重载方法。 详见泛型方法的重载问题待更新