【发布时间】:2017-12-12 18:00:25
【问题描述】:
场景:同一个类中有两个方法,同名,不同的参数和不同的访问修饰符。例如:
public void m1(int a){}
private void m1(String b){}
是否超载?
【问题讨论】:
-
为什么你认为不是?
标签: java methods overloading
场景:同一个类中有两个方法,同名,不同的参数和不同的访问修饰符。例如:
public void m1(int a){}
private void m1(String b){}
是否超载?
【问题讨论】:
标签: java methods overloading
【讨论】:
public void m1(List<Integer> l) 和 public void m1(List<String> l) 具有不同的参数列表,但它们是等效的。所以这里没有重载。
让我们参考一下 Java 语言规范。
如果一个类的两个方法(无论都是在同一个类中声明,还是 都由一个类继承,或者一个声明一个继承)具有 名称相同但签名不等效,然后 方法名被称为重载。
从第 8.4.2 节中,我们知道参数类型是签名的一部分,并且您的两个方法的参数类型不同,因此它们是重载。
Section 8.4.2 Method Signature
两个方法或构造函数,M 和 N,如果它们具有相同的签名 具有相同的名称、相同的类型参数(如果有)(第 8.4.4 节),并且, 在将 N 的形式参数类型调整为类型之后 M 的参数,相同的形参类型。
【讨论】:
“同一类中同一方法的两个版本”称为方法重载或编译时多态。
【讨论】: