什么是Java重载?

我不明白Java中的重载。 与多态性有关系吗? 对我来说这似乎很抽象。 我来自Javascript语言更多? 这适用于Javascript吗?

重载意味着可以使用多个签名定义相同的方法名称 – forms参数列表(及其类型)。

重载意味着不同语言的不同内容。 Java是强类型的(事实上有些人可能会说“凶狠地打字”)。 它只是意味着可以有一个函数的不同版本,编译器可以通过查看函数(方法)调用中的参数类型来判断哪一个是预期的。

JavaScript不是那样的; 函数的forms参数只是在函数体中按名称引用,但是对于它们没有什么特别的,任何函数都可以用任何参数和任意数量的函数调用。

有些语言使用“重载”作为运行时概念。 在Erlang中,从函数的几个替代版本中挑选时,并不重要的参数类型 ; 这是价值观

编辑 – @MarkoTopolnik指出,问题不在于类型系统的“强度”(或“凶猛”:-),而在于它的静态程度。 Java坚持要在几乎所有地方显式声明类型,而JavaScript(除了一些新的类型数组结构)不会。

重载是允许在一个类中具有相同名称和不同签名的两个方法的function,例如

public void foo(); public void foo(int i); 

现在你可以不带参数或使用一个int参数调用方法foo() ,并且将执行不同的方法。

你可能会对重载和覆盖感到困惑。 压倒一切确实与polimorphysm有关。 这是将基类的function重写(更改)为子类的能力。 例如,如果Child extends Base并且两者都有方法foo() ,则子进程的foo()会覆盖Base的实现。 类似的function确实存在于JavaScript中。

如果你class上有以下方法

public void calculate() {}

以下是它的一些重载版本。(注意同名)

public void calculate(int i) {}
public void calculate(int i, int j) {}

但是以下不是上述方法中的重载方法。 此方法与原始方法的不同之处仅在于返回类型。 java中不允许使用具有相同签名但具有不同返回类型的方法。

public int calculate(int i) {}

具有多个定义的同名方法称为重载

可能与参数类型和参数数量不同。

 import java.io.*; class demoOverloading { int add(int x,int y) //method definition { return (x+y); } double add(double x,double y) //method definition { return (x+y); } } public class JavaApplication4 { public static void main(String[] args) { demoOverloading demo=new demoOverloading(); //creating object for above class System.out.println("Sum of Integer "+demo.add(10,20)); //calling integer add method System.out.println("Sum of double "+demo.add(33.44,67.5)); //calling double add method } } 

上面的示例有两个具有相同名称的方法添加但是一个包含int而另一个包含双参数,像这样我们可以使用不同的参数,

也可能使参数数量有所不同..

谢谢