黑马程序员技术交流社区

标题: 一个构造函数重载的问题 [打印本页]

作者: 辉Se天空    时间: 2014-12-28 18:11
标题: 一个构造函数重载的问题
本帖最后由 辉Se天空 于 2014-12-28 18:18 编辑


  1. class Car{
  2.         private String color;
  3.         private String type;
  4.         Car(String color)
  5.         {
  6.                 this.color = color;
  7.                 System.out.println("color:"+this.color+"  type:"+this.type);
  8.         }
  9.         Car(String type)
  10.         {
  11.                 this.type = type;
  12.                 System.out.println("color:"+this.color+"  type:"+this.type);
  13.         }
  14.         Car(String color,String type)
  15.         {
  16.                 this.color = color;
  17.                 this.type = type;
  18.                 System.out.println("color:"+this.color+"  type:"+this.type);
  19.         }
  20. }
复制代码





Car(String color)、Car(String type)的两个构造函数同时存在是错误的,但是我想实现color和type分别赋值,请教大家怎么实现?
作者: kerner    时间: 2014-12-28 18:27
函数的标签是:函数名+形参类型
所以前面两个属于重复定义,因为它们的形参类型一样。你要分别赋值,就必须穿进去两个值啊,只能定义两个形参。
作者: 辉Se天空    时间: 2014-12-28 18:38
kerner 发表于 2014-12-28 18:27
函数的标签是:函数名+形参类型
所以前面两个属于重复定义,因为它们的形参类型一样。你要分别赋值,就必须 ...

我知道是犯了重复的错误,我的意思不是用
        Car(String color,String type)
        {
                this.color = color;
                this.type = type;
                System.out.println("color:"+this.color+"  type:"+this.type);
        }
而是想既有一个只传入color的构造函数,又有一个只传入type的构造函数,我自己感觉没法实现,所以请教一下你们
作者: kerner    时间: 2014-12-28 18:51
构造初始化函数,就是新建对象时被编译器调用的,也只能被调用一次,新建一个对象,你怎么能只初始化一个成员变量,而不初始化其它变量?
作者: 辉Se天空    时间: 2014-12-28 18:56
kerner 发表于 2014-12-28 18:51
构造初始化函数,就是新建对象时被编译器调用的,也只能被调用一次,新建一个对象,你怎么能只初始化一个成 ...

我还是初学,有点钻牛角尖,我现在只是一种假设,在实际中一般要全部初始化,我那样想是不是没法实现啊
作者: Hello_Boys    时间: 2014-12-28 19:07
Car(String color)、Car(String type),应为方法名和参数类型都相同,所以不是重载。 Car(String color,String type),这一个方法就能实现你要的功能。
作者: dede风    时间: 2014-12-28 19:14
Car(StringBuffer color)  Car(String type) 注意将私有color声明为StringBuffer
或其他类似的方法:
Car(String color), Car(int type) 其中车型用整型代替  
作者: 常强儿    时间: 2014-12-28 20:19
参数写两个,调用时不使用就传进去null,构造方法内判断,如果哪个参数是null就不进行赋值,或者直接赋成null也可以

作者: yedaiwang    时间: 2014-12-28 22:37
刚刚看到这 不怎么懂
作者: yninggis    时间: 2014-12-29 00:48
辉Se天空 发表于 2014-12-28 18:38
我知道是犯了重复的错误,我的意思不是用
        Car(String color,String type)
        {

好吧,既然这样,你就给其中的一个加一个其他的参数呗,这个参数不用就行了,这样两个构造函数就可以重载了。或者做点别的变动,如果什么都不想变,参数类型、个数一样,那肯定是不行的。
作者: dandan520    时间: 2014-12-29 06:29
观摩观摩。
作者: 446111220    时间: 2014-12-29 10:09
学习学习
作者: 天堂雨    时间: 2014-12-29 11:05
你可以考虑 两个参数都写上,只想用一个那么另一个传个null
作者: zhiyi    时间: 2014-12-29 13:43
这样就可以了
  1. //新建一个colorString类,区别与String数据类型;当然也可以使用现成StringBuffer类
  2. class colorString
  3. {
  4.         private String color;
  5.         setColor(String co)
  6.         {
  7.                 this.color=co;
  8.         }
  9.         String getColor()
  10.         {
  11.                 return this.color;
  12.         }
  13. }
  14. /*-----------------------------------------------------------------------------------------------*/
  15. class Car{
  16.         private colorString color=new colorString();//改为colorString类
  17.         private String type;
  18.         Car(colorString color)
  19.         {
  20.                 this.color.setColor(color)//调用函数存储color
  21.                 System.out.println("color:"+this.color.getColor()+"  type:"+this.type);
  22.         }
  23.         Car(String type)
  24.         {
  25.                 this.type = type;
  26.                 System.out.println("color:"+this.color.getColor()+"  type:"+this.type);
  27.         }
  28.         Car(colorString color,String type)
  29.         {
  30.                                 this.color.setColor(color);
  31.                 this.type = type;
  32.                 System.out.println("color:"+this.color.getColor()+"  type:"+this.type);
  33.         }
  34. }
复制代码

作者: 周景新    时间: 2014-12-29 14:00
参数类型一样,形式参数重复了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2