我仍然是核心java的学习者。 我想了解这里的多态概念。
我已经理解了重写,并对重载有疑问。
为什么我们称其为方法重载,尽管我们调用不同的方法(我的意思是只有参数不同。)。
我只是觉得这很简单,就像调用在编译时绑定的不同方法一样,唯一的区别是我有相同的方法名称..
Class A {
method A(int i){}
method A(int i, int B){}
}
请分享您的意见。
通过方法重载,您可以调用“相同的方法”,只是使用不同的参数和/或不同的输出。这使您可以轻松编写具有相同核心功能但具有不同输入参数的方法。示例:
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
在新代码中,如果在幕后没有像
setValue
那样处理 long,则
java.util.Date
的行为可能不会像前一个代码那样。编译器不会显示任何错误,因为另一个同名的方法将默默地接管您的新类型,并且程序将被破坏!
仅在方法执行相同操作时才使用重载,否则每次使用不同的方法名称以避免重构问题。
多态性:-
第一件事:-
多态性用于降低程序员的复杂性。想想如果 println() 没有重载会发生什么,你必须记住不同的函数来打印不同的类型。
第二件事:-
在不支持 java 编译时多态性的情况下,在 java 中所有函数都是隐式虚拟的。它也在运行时实现。
第三件事:-
通过重载具有不同原型的同名函数,prototype=
名称、返回类型和参数。
在java中,返回类型你不能实现重载,名称必须相同,所以唯一的事情是参数你可以改变以实现重载..
您作为开发该类的开发人员思考,因此您说每次都会根据参数调用不同的方法。(它们的类型和/或数量)。
尝试以将使用此类的开发人员的身份来思考。对他来说,似乎他只使用一种方法来满足他希望传递的所有类型的参数。(虽然调用了不同的方法,但对于外部世界来说,它“看起来”好像只有一种方法)。
希望有帮助:)
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)仅更改参数名称