A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 辉Se天空 中级黑马   /  2014-12-28 18:11  /  1256 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 辉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分别赋值,请教大家怎么实现?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

16 个回复

倒序浏览
函数的标签是:函数名+形参类型
所以前面两个属于重复定义,因为它们的形参类型一样。你要分别赋值,就必须穿进去两个值啊,只能定义两个形参。
回复 使用道具 举报 1 0
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
构造初始化函数,就是新建对象时被编译器调用的,也只能被调用一次,新建一个对象,你怎么能只初始化一个成 ...

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

点评

这种方法不错  发表于 2014-12-28 23:08
回复 使用道具 举报
刚刚看到这 不怎么懂
回复 使用道具 举报
辉Se天空 发表于 2014-12-28 18:38
我知道是犯了重复的错误,我的意思不是用
        Car(String color,String type)
        {

好吧,既然这样,你就给其中的一个加一个其他的参数呗,这个参数不用就行了,这样两个构造函数就可以重载了。或者做点别的变动,如果什么都不想变,参数类型、个数一样,那肯定是不行的。
回复 使用道具 举报
dandan520 来自手机 中级黑马 2014-12-29 06:29:41
11#
观摩观摩。
回复 使用道具 举报
学习学习
回复 使用道具 举报
你可以考虑 两个参数都写上,只想用一个那么另一个传个null
回复 使用道具 举报
zhiyi 中级黑马 2014-12-29 13:43:10
14#
这样就可以了
  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. }
复制代码

点评

点赞,学到后面,看了你这方法,很赞  发表于 2015-3-11 16:04
回复 使用道具 举报
参数类型一样,形式参数重复了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马