Java方法重载

我仍然是核心java的学习者。 我想在这里理解多态性概念。

我理解了压倒一切,并对重载有疑问。

为什么我们将它称为方法重载虽然我们调用不同的方法(我的意思是只有参数不同。)。

我只是觉得调用编译时绑定的不同方法非常简单,只是区别在于我有相同的方法名称。

Class A { method A(int i){} method A(int i, int B){} } 

请分享您的意见。

问Punith

使用方法重载,您将调用“相同的方法”,仅使用不同的参数和/或不同的输出。 这使您可以轻松编写具有相同核心function但具有不同输入参数的方法。 例:

 public int Sum(int a, int b) { return a + b; } public double Sum (double a, double b) { return a + b; } 

否则你会有像SumInt(…)和SumDouble(…)等方法。 您还可以使用相同返回类型但输入不同的2个方法,并且仍然使用重载以方便:

 public int Sum(int a, int b) { return Sum(a, b, 0); } public int Sum (int a, int b, int c) { return a + b + c; } 

这样,你只有一个地方有逻辑,所有其他方法只用一个逻辑调用一个方法,只有不同的参数。 然后还有构造函数重载。 例如,你可以有一个空的构造函数,你可以在其中设置一些默认值,你可以有一个构造函数,你可以自己设置值:

 //Without overloading you'll have to set the properties after instantiating the class public MyClass() { this.PropertyOne = "1"; this.PropertyTwo = 2; } //usage: MyClass instance = new MyClass(); //now theproperties are already set to "1" and 2, wheter you like it or not //here you change the values instance.PropertyOne = "..."; instance.PropertyTwo = 0; //With constructor overloading you have this public MyClass() { this("One", 2); } public MyClass(string propOne, int propTwo) { this.PropertyOne = propOne; this.PropertyTwo = propTwo; } //usage: MyClass instance = new MyClass("MyValue", 1000); //if you call MyClass() the default values STILL will be set :) 

第二种方式为您提供更多可能性,而不是? 它使更改代码变得更加容易。 希望这可以帮助!

请注意,虽然方法重载在方法在幕后执行相同操作的情况下很有用,但在不是这种情况时它会成为地狱:

 someObject.setValue(obj.getTime()); // getTime returns a java.util.Date 

经过一些重构(日期改为长时间戳……):

 someObject.setValue(obj.getTime()); // getTime now returns a long 

在新代码中,如果在幕后不像java.util.Date那样处理long,则setValue行为可能与前一个不同。

编译器不会显示任何错误,因为具有相同名称的另一个方法将默默接管您的新类型,程序将被破坏!

仅在方法执行相同操作时才使用重载,否则每次使用不同的方法名称以避免重构问题。

好的,我不知道你到底想知道什么……
多态性: –
第一件事: –多态性用于降低程序员的复杂性。 想想如果println()没有重载会发生什么,你必须记住打印不同类型的不同function。
第二件事: –如果java编译时不支持多态,在java中所有函数都是隐式虚函数。 它也在运行时实现。
第三件事: –通过重载一个具有不同原型的同名函数, prototype =
名称,返回类型和参数。 在带有返回类型的java中,u不能实现重载,名称必须相同,所以只有参数u可以更改为实现重载…

“为什么我们称它为方法重载,虽然我们调用不同的方法(我的意思是只有参数不同。)”

您正在考虑开发类的开发人员因此您说每次根据参数调用不同的方法。(他们的类型和/或数字)。

试着想一下将使用这个类的开发人员。 对他而言,似乎他只使用了一种方法,可以满足他希望通过的所有类型的论点。(虽然不同的方法被称为外部世界但它“出现”就像只有一种方法一样)。

希望能帮助到你 :)

方法重载定义可以包含三点:
1.方法名称相同
2.不同的参数列表
3.通过改变参数的顺序。

方法当需要对象使用不同的输入参数执行相同的任务时,使用重载。我们可以通过下面的示例更清楚地理解方法重载

 Class Rectangle { int length,breadth; //Default Constructor Rectangle( ) { length=0; breadth=0; } //Parameterized Constructor Rectangle(int x,int y ) { length=x; breadth=y; } int area( ) { int a; a=length * breadth; return(a ); System.out.println("Area of rectangle is:"+a ); } Class calarea { public static void main( string args[]) { Rectangle rect1= new Rectangle(); Rectangle rect2= new Rectangle(10,15); rect1.area( ); rect2.area( ); } } 

在这个程序中我们可以看到相同的方法“Reactangle”正在使用两个不同的参数列表,所以我们可以说构造函数方法正在重载…首先,方法名称将匹配,之后它将匹配数字和类型参数和根据此调用的function。

方法有两点无法实现重载:
1)通过改变返回类型
2)仅更改参数名称