黑马程序员技术交流社区

标题: 构造函数传入参数问题 [打印本页]

作者: rolling-stone    时间: 2014-8-1 11:23
标题: 构造函数传入参数问题
第一个版本:
  1. class Bird
  2. {
  3.         private String name;
  4.         public Bird(){}
  5.         public Bird(String name)
  6.         {
  7.                 this.name = name;
  8.         }
  9.         public void Walk()
  10.         {
  11.                 System.out.println("Walk");
  12.         }
  13.         public String getName()
  14.         {
  15.                 return name;
  16.         }
  17.         public void setNmae(String name)
  18.         {
  19.                 this.name = name;
  20.         }
  21. }
  22. class Chicken extends Bird
  23. {
  24.         private String crest;
  25.         Chicken(){super();}
  26.         Chicken(String name,String crest)
  27.         {
  28.                 super(name);
  29.                 this.crest = crest;
  30.         }
  31.         public String getCrest()
  32.         {
  33.                 return crest;
  34.         }
  35.         public void wu()
  36.         {
  37.                 System.out.println("咕咕叫");
  38.         }
  39. }
  40. class ChickenDemo
  41. {
  42.         public static void main(String[] args)
  43.         {
  44.                 Chicken c = new Chicken("xiaoming","red");
  45.                 System.out.println(c.getName());
  46.                 System.out.println(c.getCrest());
  47.                 c.Walk();
  48.                 c.wu();
  49.         }
  50. }
复制代码
第二个版本:
  1. class Bird
  2. {
  3.         private String name;
  4.         public Bird(){}
  5.         public Bird(String name)
  6.         {
  7.                 this.name = name;
  8.         }
  9.         public void Walk()
  10.         {
  11.                 System.out.println("Walk");
  12.         }
  13.         public String getName()
  14.         {
  15.                 return name;
  16.         }
  17.         public void setNmae(String name)
  18.         {
  19.                 this.name = name;
  20.         }
  21. }
  22. class Chicken extends Bird
  23. {
  24.         private String crest;
  25.         Chicken(){super();}
  26.         Chicken(String name,String crest)
  27.         {
  28.                 super(name);
  29.                 this.crest = crest;
  30.         }
  31.         public String getCrest()
  32.         {
  33.                 return crest;
  34.         }
  35.         public void wu()
  36.         {
  37.                 System.out.println("咕咕叫");
  38.         }
  39. }
  40. class ChickenDemo
  41. {
  42.         public static void main(String[] args)
  43.         {
  44.                 Chicken c = new Chicken();
  45.                 c.Chicken("xiaoming","red");
  46.                 System.out.println(c.getName());
  47.                 System.out.println(c.getCrest());
  48.                 c.Walk();
  49.                 c.wu();
  50.         }
  51. }
复制代码
两个版本就差在最后的主函数里面,一个传参数的方式是:
Chicken c = new Chicken("xiaoming","red");
另一个传参数的方式是;
Chicken c = new Chicken();
c.Chicken("xiaoming","red");
但是第二种会报错,为什么?


作者: 渴望学习    时间: 2014-8-1 11:38
c.Chicken("xiaoming","red"); 这句话是什么意思???
你用对象去调用有参的构造函数? 构造函数是是用来初始化的 只能 new  有参 或者无参的构造函数!
作者: rolling-stone    时间: 2014-8-1 14:41
渴望学习 发表于 2014-8-1 11:38
c.Chicken("xiaoming","red"); 这句话是什么意思???
你用对象去调用有参的构造函数? 构造函数是是用来 ...

现在明白了,谢谢
作者: Peach2014    时间: 2014-8-1 14:58
Chicken c = new Chicken();
c.Chicken("xiaoming","red");
构造函数的作用是实例化一个对象,并对该对象进行初始化,同一个对象肯定不能实例化两次的。
简单的比方,你第一句好比你妈把你生下来了,第二句的意义就是你妈把你再生一遍。这样难道可以吗?

作者: 怀念黑海岸    时间: 2014-8-1 18:53
java中只要使用关键new一次,就会产生个对象,产生这个对象的过程是jvm自己调用与你传入参数项匹配的构造函数,首先你的用法就错误了。生成新对象只能使用new关键字去调用相应的构造函数,没楼主你的那种用法。
作者: guanxiangliang    时间: 2014-8-1 19:13
对象调用构造函数?哥们,你该多看看接口了
作者: 奋上    时间: 2014-8-1 20:31
上面的大片代码是怎么传上来的啊,带行数的
作者: rolling-stone    时间: 2014-8-1 20:56
奋上 发表于 2014-8-1 20:31
上面的大片代码是怎么传上来的啊,带行数的

编辑上面有个<>符号,把代码复制到这个里面就行了.
作者: 奋上    时间: 2014-8-1 20:58
rolling-stone 发表于 2014-8-1 20:56
编辑上面有个符号,把代码复制到这个里面就行了.

好的,谢谢了




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