构造函数相信简单的就不用多说了,再次说一些构造函数其他方面的用法。
构造函数能实现的功能
构造函数的一个关键特征是它会在对象能够被赋值给引用之前就执行。也就是说,我们可以通过构造函数来介入new的过程。通过这个特点,我们可以通过构造函数实现以下功能:
1. 记录产生了多少个对象实例
2. 记录特定的状态
3. 给实例变量赋值
4. 留下创建对象的证据
5. 将对象添加到ArayList
6. 创建HAS-A对象
构造函数的重载
在我们平时创建对象的时候,如果没有定义构造函数,系统会自动帮我们创建一个隐式的无参构造函数,然而,在我们自定义了有参的构造函数之后,还是建议我们再定义一个无参的构造函数。因为很多时候只依靠单一的构造函数我们不能很清晰的创建合适的对象,所以很多时候是同时定义无参构造函数和有参构造函数的。
重载构造函数要符合基本的重载规则:参数的数据类型/个数/顺序不同。同时,当我们定义了有参构造函数之后,系统不会在帮我们创建无参的构造函数,必须自己定义。
从某个构造函数调用重载版的另一个构造函数。 这种可以通过this来实现,但要注意this()只能用在够赞函数中,且必须是第一行语句。
class Mini extends Car{
Color color;
public Mini(){
this(Color.Red); //调用重载的有参构造函数
}
public Mini(Color c)
{
super("Mini");
color=c;
}
public Mini(int size)
{
this(Color.Red);
super(size); //报错,this和super都必须放在构造函数的第一行,所以此处没法使用super()
}
}
上面这个例子,通过无参构造函数中调用this()方法并传入默认的初始值,这样可以避免相同的程序代码出现在每个构造函数中,维护的时候只需要修改那个唯一拥有真正初始化代码的构造函数即可。
继承中的构造函数
在创建新的对象时,所有继承下来的构造函数都会执行。 构造函数在执行时,第一件事情就是去执行它的父类的构造函数,这个连锁反应到Object类为止。这样的过程被称为“构造函数链”。
子类调用构造函数的方法是通过super()方法,且super()方法必须在子类构造函数的第一行。如果是调用无参构造函数,则可以省略不写,系统会自动隐式调用,如果是调用有参构造函数,则必须进行手动调用super(参数)方法。