java允许在一个类中,多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载,编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析
1 普通方法的重载
普通方法的重载是Java实现多态技术的重要手段,为编程带来了很多便利
当方法同名时,为了让编译器区别他们,至少需要下面之一不同
1 参数个数不同
2 对应位置上的参数类型不同
不允许参数完全相同而只是返回值不同的情况出现。无法进行编译,程序在eclips中显示错误
2 构造方法的重载
见文章构造方法的继承
重载的解析
当类的设计者提供了重载方法之后,类的使用者在使用这些方法时编译器需要确定调用哪一个方法,确定的唯一依据是参数列表,确定的过程被称为重载的解析。
编译器解析的步骤按照下面的顺序进行
1 根据调用的方法名,查找是否有定义好的同名方法,如果没有就会报错
2 比较形参和实参的数目是否相等,如果没有则会报错。如果有一个或多个方法符合条件,这些方法进入候选集
3 与候选集中的方法比较参数表,如果对应位置上的每个参数类型完全匹配,或者可以通过扩展转换相匹配,则该方法称为可行方法,并入可行集。若不存在可行方法,则会报错
4 在可行集中按照下面的原则选取最佳可行方法,若最佳可行方法为0 则会报错,否则最佳可行方法就是最终确定要调用的方法
获取的原则是
1 若每一个参数都可以完全匹配,它就是最佳可行方法
2若某个方法的每一个参数都不比别的方法差,且至少有一个参数比别的方法好,它就是最佳可行方法,这里的差和好是指,完全匹配要比扩展转化好,不过同样是扩展转换,仍然存在好喝差的问题,扩展转换有两条路径
byte-short-int-long-float-double
char-int-long-float-double
这两条路径中位于左边的类型都可以转换为右边的类型,不过源类型与目标类型的距离越近,则这种转化就越好。
示例
show(int a ,int b,int c) //1
show(int a ,int b,double c) //2
show(int a ,double b,double c)//3
show(double a,double b,int c) //4
下面是调用
show(1,2,3);//1,2,3,4都是可行方法所有参数完全匹配1
show(1.0,2.0,3.0);//没有一个可行方法
show(1.0,2,3);//4是最佳可行方法
show(1,2.0,3);//3,4都是可行方法,没有最佳可行方法,报错
重载和覆盖都是多态的表现,他们在某些地方很相似,很容易引起初学者的疑惑,这里将它们之间的区别总结如下
1 重载和覆盖的方法名称都相同,但重载要求参数列表不同,而覆盖要求参数列表完全相同。
2 重载对于方法前面的修饰符没有限制,而覆盖则对这些修饰符的使用有限制
3 重载时编译器在编译期间就可以确定调用那一个方法,而覆盖则有可能在运行期间才能确定。
分享到:
相关推荐
在方法重载中,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回值类型作为重载函数的区分标准。 3. 方法重载的例子 下面是一个简单的方法重载的例子: ```java package c04...
在Java编程语言中,方法的重载(Overloading)与重写(Overriding)是两个非常重要的概念。它们虽然只有一字之差,但其实质却大相径庭。理解这两者的不同对于深入掌握Java语言至关重要。 ### 一、重载(Overloading...
Java 中重载方法的实例-1 在 Java 中,方法重载是一种非常重要的技术,实现多态性的一种方式。下面我们来详细介绍方法重载的概念和实例。 概念简介 方法重载是在 Java 中,同一个类中的两个或两个以上的方法可以...
Java 中重载与重写的区别 Java 中的重载(Overloading)和重写(Overriding)是两个不同的概念,它们都是 Java 语言中实现多态性的手段。 方法重载(Overloading) 方法重载是让类以统一的方式处理不同类型数据的...
在Java编程语言中,方法重载(Overloading)是一种重要的多态性实现方式,它允许我们在同一个类中定义多个同名但参数列表不同的方法。理解方法重载的内存分配过程对于初学者来说至关重要,因为这有助于深入理解Java...
Java 中的重载(Overloading)与重写(Overriding)是两个重要的概念,它们都是实现多态性的重要方式,但两者之间存在着显著的区别。 **重载(Overloading)** 重载是指在同一个类中可以有多个同名方法,但这些...
Java中的重载(Overloading)和重写(Overriding)是面向对象编程中两个重要的概念,它们体现了Java的多态性。多态性是面向对象编程的三大特性之一,另外两个是封装和继承。 首先,让我们详细解释一下方法的重载。重载...
3. **返回类型**:重载中返回类型可以不同,但重写中返回类型必须相同。 4. **访问权限**:重写时,子类方法的访问权限不能低于父类方法。 5. **多态表现**:重载在编译时决定调用哪个方法,而重写在运行时根据对象...
在Java编程语言中,"重载"(Overloading)和"重写"(Overriding)是两个非常重要的概念,它们都是面向对象特性的重要体现。理解并掌握这两个概念对于编写高效、可维护的代码至关重要。 首先,我们来谈谈“重载”...
### JAVA重载概念详解 #### 一、方法重载的概念 在 Java 编程语言中,方法重载(Method Overloading)是一种非常重要的特性,它允许我们在同一个类中定义多个同名但参数列表不同的方法。这种方法重载的概念是实现...
Java中重载与重写的对比与区别 在Java编程语言中,重载(Overloading)和重写(Overriding)是两种不同的编程技术。它们都可以实现多态性,但是在使用和实现方面有着明显的区别。 一、重载(Overloading) 重载是...
63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java...
Java方法重载+Java重载案例+Java重载 Java方法重载+Java重载案例+Java重载 Java方法重载+Java重载案例+Java重载 Java方法重载+Java重载案例+Java重载
64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载特点.zip64.java方法重载...
65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载练习.zip65.java方法重载...
### Java中的方法重载与重写以及线程概念详解 #### 一、方法重载(Overloading) 在Java中,**方法重载**是指在同一个类中定义多个具有相同名称但参数列表不同的方法。这里提到的“参数列表不同”不仅包括参数的...
在Java编程语言中,函数重载(Overloading)和覆盖(Overriding)是面向对象特性的重要组成部分,它们分别处理多态性中的静态多态和动态多态。本篇将通过一个具体的例子,深入探讨这两个概念。 函数重载是指在同一...
Java编程语言中的重载(Overloading)和重写(Overriding)是两个关键的概念,它们都是多态性的重要体现,但各自有着不同的含义和规则。 首先,我们来详细了解一下方法的重载。重载,简单来说,就是在一个类中定义多个...
【Java中的重载与重写】是面向对象编程中的两个重要概念,它们体现了Java的多态性,但有着明显的区别。 一、重载(Overloading) 1. 重载发生在同一类内部,允许存在多个同名方法,但这些方法的参数列表必须不同,即...