首页 > 编程知识 正文

java方法重载简单例子,java中什么叫方法重载

时间:2023-05-03 21:42:55 阅读:158126 作者:2378

方法重载是指如果一个类的参数列表不同,则允许一个类具有同名的多个方法的功能。 与重载Java构造函数类似,一个类可以具有多个具有不同参数列表的构造函数。

让我们回到重点。 当你说参数列表时,它表示方法拥有的参数。 例如,具有两个参数的方法add(int a,int b )的参数列表与方法add的参数列表不同(inta,int b,int c )。

要重载重载方法的三种方法方法,方法的参数列表必须在以下两个方面不同:

1 .参数数量。

例如,这是超载的有效情况

add(int,int ) add(int,int,int ) )。

2 .参数的数据类型。

例如:

add(int,int ) add(int,float )3.参数的数据类型顺序。

例如:

add(int,float ) add (float,int )方法重载的无效情况:

当我说参数列表时,我不是在说方法的返回类型。 例如,如果两个方法具有相同的名称、相同的参数和不同的返回类型,则这不是用有效的方法重载示例。 这将导致编译错误。

intadd(int,int ) float add (int,int )方法重载是静态多态性的一个例子。 多态性及其类型将在单独的教程中讨论。

注意事项:

1 .静态多态性也称为编译时绑定或早期绑定。

2 .静态绑定发生在编译时。 方法重载是静态绑定的示例,由方法调用定义的绑定在编译时发生。

方法重载示例如本指南开头所述,方法重载是通过声明具有不同参数的同一方法来完成的。 参数必须根据参数(或参数)的数量、顺序或类型而不同。 让我们看看每个案例的例子。

参数列表也称为参数列表

示例1:重载参数列表中的参数数量不同此示例说明如何使用不同数量的参数完成方法的重载

classdisplayoverloading { public void disp (charc ) ) system.out.println; }publicvoiddisp(charc,int num ) system.out.println ) c''num; } class sample { publicstaticvoidmain (string args [ ] ) displayoverloadingobj=newdisplayoverloading ); obj.disp(a ); obj.disp('a ',10 ); }} 输出:

在上面的示例中,aa 10方法disp )根据参数的数量重载。 disp有两个方法名称,但参数不同。 两者都有不同数量的参数。

示例2:重载参数数据类型的差异(在本例中为方法disp ) )重载了基于参数的数据类型。 disp ) )的两个方法。 一个是char类型的参数,另一个是int类型的参数。

classdisplayoverloading2{ public void disp (charc ) ) system.out.println; }publicvoiddisp(intc ) system.out.println ); } class sample2{ publicstaticvoidmain (string args [ ] ) display over loading2obj=newdisplayoverloading2); obj.disp(a ); obj.disp(5; }输出:

a5 例3:重载参数的数据类型顺序(其中disp ) )根据参数的数据类型顺序重载方法。 这两种方法在参数列表中具有不同的数据类型顺序。 第一种方法的参数列表为char,int,第二种方法的参数为int,char。 由于顺序不同,该方法可以顺利重载。

类显示加载3 { publ

ic void disp(char c, int num) { System.out.println("I’m the first definition of method disp"); } public void disp(int num, char c) { System.out.println("I’m the second definition of method disp" ); }}class Sample3{ public static void main(String args[]) { DisplayOverloading3 obj = new DisplayOverloading3(); obj.disp('x', 51 ); obj.disp(52, 'y'); }}

输出:

I’m the first definition of method dispI’m the second definition of method disp 方法重载和类型提升

例如,当将较小大小的数据类型提升为大于此大小的数据类型称为类型提升时,例如:字节数据类型可以提升为short,short数据类型可以提升为int,long,double等。

它与方法重载有什么关系?
好吧,了解类型提升非常重要,否则您会认为程序会引发编译错误,但实际上由于类型提升,程序可以正常运行。
让我们举个例子看看我在这里说什么:

class Demo{ void disp(int a, double b){System.out.println("Method A"); } void disp(int a, double b, double c){System.out.println("Method B"); } public static void main(String args[]){Demo obj = new Demo();/* I am passing float value as a second argument but * it got promoted to the type double, because there * wasn't any method having arg list as (int, float) */obj.disp(100, 20.67f); }}

输出:

Method A

如您所见,我在调用disp()方法时传递了float值,但是由于没有任何参数列表为(int,float)的方法,它被提升为double类型。

但是这种类型的促销并不总是会发生,让我们看另一个例子:

class Demo{ void disp(int a, double b){System.out.println("Method A"); } void disp(int a, double b, double c){System.out.println("Method B"); } void disp(int a, float b){System.out.println("Method C"); } public static void main(String args[]){Demo obj = new Demo();/* This time promotion won't happen as there is * a method with arg list as (int, float) */obj.disp(100, 20.67f); }}

输出:

Method C

如您所见,由于存在一个具有匹配参数类型的方法,因此没有发生这种类型的升级。
类型提升表:
左侧的数据类型可以提升为右侧的任何数据类型。

byte → short → int → longshort → int → longint → long → float → doublefloat → doublelong → float → double 让我们看看方法重载的几种有效/无效情况

情况1:

int mymethod(int a, int b, float c)int mymethod(int var1, int var2, float var3)

结果:编译时错误。参数列表完全相同。两种方法具有相同的编号,数据类型和相同的数据类型序列。

情况2:

int mymethod(int a, int b)int mymethod(float var1, float var2)

结果:非常好。有效的重载情况。这里参数的数据类型是不同的。

情况3:

int mymethod(int a, int b)int mymethod(int num)

结果:非常好。有效的重载情况。这里的参数数量是不同的。

情况4:

float mymethod(int a, float b)float mymethod(float var1, int var2)

结果:非常好。有效的重载情况。参数的数据类型顺序不同,第一种方法具有(int,float),第二种方法具有(float,int)。

情况5:

int mymethod(int a, int b)float mymethod(int var1, int var2)

结果:编译时错误。参数列表完全相同。即使方法的返回类型不同,也不是有效的情况。因为重载方法时方法的返回类型无关紧要。

在程序末尾检查之前,请先猜测答案:
问题1 –返回类型,方法名称和参数列表相同。

class Demo{ public int myMethod(int num1, int num2) { System.out.println("First myMethod of class Demo"); return num1+num2; } public int myMethod(int var1, int var2) { System.out.println("Second myMethod of class Demo"); return var1-var2; }}class Sample4{ public static void main(String args[]) { Demo obj1= new Demo(); obj1.myMethod(10,10); obj1.myMethod(20,12); }}

答案:
它将引发编译错误:同一类中不能定义多个具有相同名称和参数列表的方法。

问题2 –返回类型不同。方法名称和参数列表相同。

class Demo2{ public double myMethod(int num1, int num2) { System.out.println("First myMethod of class Demo"); return num1+num2; } public int myMethod(int var1, int var2) { System.out.println("Second myMethod of class Demo"); return var1-var2; }}class Sample5{ public static void main(String args[]) { Demo2 obj2= new Demo2(); obj2.myMethod(10,10); obj2.myMethod(20,12); }}

答案:
它将引发编译错误:一个类中不能给出多个具有相同名称和参数列表的方法,即使它们的返回类型不同。在重载的情况下,方法返回类型无关紧要。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。