黑马程序员技术交流社区

标题: 关于函数构造器的疑问,求解惑? [打印本页]

作者: 孙政    时间: 2013-5-3 11:33
标题: 关于函数构造器的疑问,求解惑?
  1. public person()
  2. {
  3.   }
  4. public person(String name,String age)
  5. {
  6.   this.name=name;
  7.   this.age=age;
  8. }
复制代码
为什么在写有参构造器时,先会定义个无参构造器,想问问有什么作用?一般在什么情况时在用?

作者: Jacky_Chen1990    时间: 2013-5-3 11:36
你需要指导一下几个知识点,才可以理解。
  
1 每一个类在默认情况下,都会有一个无参数构造器!
2 当显示申明了带参构造器,那么无参构造器就不存在了,需要无参构造器,就必须重新申明!
3 构造器是不能够继承的
4 在类构造器中,无论是有参数还是无参数构造器,默认情况下,首先会调用父类的无参构造器(一直到最上层的父类),这是因为要调用父类继承下来的方法必须要先初始化父类.
5 需要在子类构造器中调用父类其它的构造器,可以显示申明。
作者: 4、5点先生    时间: 2013-5-3 11:54
学习、、
作者: 赵崇友    时间: 2013-5-3 11:58
标题: RE: 关于函数构造器的疑问,求解惑?
  1. class Person
  2. {
  3.      private String name;
  4.      private String age;
  5.      public person()//无参数的构造函数
  6.     {
  7.      }
  8.    public person(String name,String age)//有参数的构造函数
  9.    {
  10.      this.name=name;
  11.     this.age=age;
  12.    }
  13. }
  14. class Student extends Person
  15. {
  16.     private String name;
  17.      private String age;
  18.      Student (String name,String age)
  19.     {
  20.        //super();
  21.        this.name=name;
  22.        this.age=age;
  23.     }
  24. }
复制代码
一般情况,我们自己不设计一个构造函数的话,java会给我们默认一个无参数的构造函数。
但是当我们需要有参数的构造函数的时候,我们就需要自己定义。你上面的第二个就是有参数的。
而Java规定了当类中有了自定义的构造函数时,就不会给默认空参数的构造函数了。这个时候,如果你还需要空参数的构造函数的话,就必须自己手动再创建一个空参数的构造函数了。如果用不到,就不要创建了。
另外空参数的构造函数还有另个作用,如上面的代码:
学生Student类继承了Person类,那么在Student类中  Student (String name,String age)构造函数的第一行会有一个默认的super(),Person类的空参数构造函数;如果Person类中没有空参数构造函数的话,则Student类中  Student (String name,String age)构造函数的第一行就没有默认的super(),这时候,必须写一个有参数的super语句:super(name,age);
不知道我解释清楚了没有。






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