方法重载

我们今天有趣的新话题是方法重载。小心——方法重载不能与方法覆盖混淆。

与覆盖不同,重载是一个非常简单的操作。它实际上不是对方法的操作,尽管有时它被称为参数多态性这个可怕的术语。

这里的问题是类中的所有方法都必须具有唯一的名称。嗯,这并不完全准确。嗯,更准确地说,这根本不准确。方法名称不必是唯一的。必须唯一是方法名称和方法参数类型的联合。这个联合被称为方法签名

例子:

代码 描述
public void print();
public void print2();
这是允许的。这两种方法具有唯一的名称。
public void print();
public void print(int n);
还有这个。这两种方法具有唯一的名称(签名)。
public void print(int n, int n2);
public void print(int n);
方法还是很独特的
public int print(int a);
public void print(int n);
但这是不允许的。这些方法不是唯一的。即使他们返回不同的类型。
public int print(int a, long b);
public long print(long b, int a);
你可以做到这一点。方法参数唯一

签名包括方法名称和参数类型。它不包括方法的返回类型和参数名称。一个类不能有两个具有相同签名的方法——编译器不知道调用哪一个。

参数名称无关紧要,因为它们在编译期间会丢失。一旦一个方法被编译,只有它的名字和参数类型是已知的。返回类型没有丢失,但方法的结果不必分配给任何东西,因此它也不包含在签名中。

根据OOP原则,多态性将不同的实现隐藏在单个接口后面。System.out.println()例如,当我们调用方法时,会根据传递的参数调用不同的方法。这是行动中的多态性。

这就是为什么在同一个类中包含具有相同名称的不同方法被认为是一种弱形式的多态性。