2012-03-07 57 views
-2

我仍然是Java核心的学习者。 我想了解这里的多态概念。Java方法重载

我已经理解了重写并且有一个关于重载的问题。

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

我只是觉得这是与调用在编译时,在这里唯一的区别结合不同的方法很简单,就是我有一个相同的方法名..

Class A { 

    method A(int i){} 

    method A(int i, int B){} 

} 

请分享您的输入。

THKS Punith

+2

什么问题? – 2012-03-07 08:41:04

+1

http://en.wikipedia.org/wiki/Function_overloading – 2012-03-07 08:41:18

+1

您需要提出一个更精确的问题 - 目前并不真正负责。 – 2012-03-07 08:41:33

回答

6

用方法重载你打电话“同样的方法”,只有不同的参数和/或不同的输出。这使您可以轻松编写具有相同核心功能但具有不同输入参数的方法。例如:

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

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

0

OK,我不知道你到底想知道什么?
多态性 -
1日的事情: -多态性是使用以减少程序设计师的复杂性。想想会发生什么,如果println()没有超载,你必须记住不同的功能来打印不同类型。
第二件事: -在java编译时多态性不支持的情况下,在java中所有的函数都是隐式虚拟的。它也在运行时实现。
3ST的事情: -通过重载函数都具有不同的原型,原型=
名称,返回类型和参数相同的名称。 在返回类型为u的java中没有实现重载,名称必须相同,所以只有东西是参数可以改变以实现重载。

+0

方法重载是一种解决编译时间的多态性形式:http://en.wikipedia.org/wiki/Ad-hoc_polymorphism – 2012-03-07 10:53:56

1

请注意,虽然方法重载是在方法做幕后同样的事情的情况下非常有用,它可以成为地狱的时候,这是不是这样的:

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

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

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

在新的代码setValue可能不会表现得像前一个如果长时间不喜欢幕后java.util.Date处理。

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

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

-1

方法重载定义可以由具有三点:
1.同样方法名
2.不同的参数列表
3.通过改变参数顺序。当需要对象与不同的输入parameter..We执行相同的任务可以理解方法通过示例

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)通过仅更改参数名称

0

“为什么我们称其为方法重载虽然我们呼吁不同的方法(我的意思是只有参数不同)。“

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

尝试作为开发人员考虑使用此类。对他来说,似乎他只用一种方法来迎合他希望传递的所有类型的论点(尽管不同的方法被称为外部世界,但“似乎”只有一种方法)。

希望它有帮助:)