2 rookie     Rookie_____ 于 2014.12.02 17:39 提问

怎样很好的将java中的构造重载学好(初学者)
现在初学,但是在写代码的时候总是无法使用构造重载这种方法,并且在写代码的时候老是思绪混乱应该怎莫办???????

9个回答

caozhy
caozhy   Ds   Rxr 2014.12.03 04:17
已采纳

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 重载时编译器在编译期间就可以确定调用那一个方法,而覆盖则有可能在运行期间才能确定。

ITshuaixiaohuo
ITshuaixiaohuo   2014.12.02 17:43

你可以研究一下System.out.println();
研究之后,你就会重载了!!

91program
91program   Ds   Rxr 2014.12.02 17:55

多看一些经典的构造重载的代码,理解其思想是关键。

xiaobeidu___
xiaobeidu___   2014.12.02 17:59
   java的三大特性你要了解清楚,这个是最基础的东西。重载要和重写区分开来。其中,构造方法是不能有返回值的。而且方法名一般都是类名。构造函数可以是public和private的,也可以是缺省的(就是什么也不写),public 和private的区别是public的构造函数可以在别的类中用new 方法实例化一个对像,比如new MainActivity();private的构造函数就不得在别的类中用new 方法实例化对像,否则编译器就会报错。
 说得简单点,public标注的方法或者构造函数可以在所有类中被调用,而private标注的方法或者构构造函数只能在自己类中调用,即使是子类也不能!
 那么什么是重载呢?方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。重载一定要和重写区分开来,这里有一篇很好的文章,多看看吧。
    http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html
    希望能帮到你。
u011814865
u011814865   2014.12.02 22:17

估计你是重载和重写纠结了,重载的例子有很多,比如构造方法,或者jdk中的方法,你会发现java中很多的方法都有相同的方法名,但传递的参数不同
方便编程人员在不同时候进行调用。

Lyric_Liu
Lyric_Liu   2014.12.04 21:13

构造重载和和函数重载是一回事,只不过加了个“构造”的头衔

sinat_24237349
sinat_24237349   2014.12.05 10:53

方法名相同,参数列表项不同

qq_24707217
qq_24707217   2015.01.24 19:27

要不要重载,关键看你的设计思路,你要干什么,写程序不要死板

qq_27511449
qq_27511449   2015.04.18 15:37

研究之后,你就会重载了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!