Java方法重载[已关闭]

问题描述 投票:0回答:5

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

我已经理解了重写,并对重载有疑问。

为什么我们称其为方法重载,尽管我们调用不同的方法(我的意思是只有参数不同。)。

我只是觉得这很简单,就像调用在编译时绑定的不同方法一样,唯一的区别是我有相同的方法名称..

Class A {

    method A(int i){}

    method A(int i, int B){}

}

请分享您的意见。

java methods overloading
5个回答
8
投票

通过方法重载,您可以调用“相同的方法”,只是使用不同的参数和/或不同的输出。这使您可以轻松编写具有相同核心功能但具有不同输入参数的方法。示例:

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 :)

第二种方式给了你更多的可能性,不是吗?而且它使更改代码变得更加容易。希望这有帮助!


1
投票

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

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

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

在新代码中,如果在幕后没有像 
setValue

那样处理 long,则

java.util.Date
的行为可能不会像前一个代码那样。

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

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


0
投票

多态性:-
第一件事:-
多态性用于降低程序员的复杂性。想想如果 println() 没有重载会发生什么,你必须记住不同的函数来打印不同的类型。 第二件事:-
在不支持 java 编译时多态性的情况下,在 java 中所有函数都是隐式虚拟的。它也在运行时实现。 第三件事:-
通过重载具有不同原型的同名函数,prototype= 名称、返回类型和参数。 在java中,返回类型你不能实现重载,名称必须相同,所以唯一的事情是参数你可以改变以实现重载..


0
投票
“为什么我们称其为方法重载,尽管我们调用不同的方法(我的意思是只有参数不同。)”

您作为开发该类的开发人员思考,因此您说每次都会根据参数调用不同的方法。(它们的类型和/或数量)。

尝试以将使用此类的开发人员的身份来思考。对他来说,似乎他只使用一种方法来满足他希望传递的所有类型的参数。(虽然调用了不同的方法,但对于外部世界来说,它“看起来”好像只有一种方法)。

希望有帮助:)


-1
投票
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”使用了两个不同的参数列表,所以我们可以简单地说构造函数方法正在被重载......
首先匹配方法名称,然后匹配参数的数量和类型,并根据此调用函数。


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

© www.soinside.com 2019 - 2024. All rights reserved.