什么是构造器?构造器的作用是什么?
- 类的第三个成员(前两个是属性和方法)
- new对象,即new关键字后面出现的一定是构造器,也只能是构造器
- 在new对象的同时,给对象的“实例变量”初始化,即赋值
格式写法:
- 方法名与类名相同,大小写也要一致
- 没有返回值类型,连void都没有
- 没有具体的返回值(不能有return语句带回具体的结果)
执行时机:
- 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
- 不能手动调用构造方法
构造方法的创建:
- 如果一个类中没有编写任何构造方法,系统将会提供一个默认的无参数构造方法
- .如果手动编写了构造方法,系统就不会再提供默认的无参数构造方法
class student{
private int age;
public student(int age){
this.age=age;
}
}
student s1 = new stdent(23);
student s2 = new stdent(34);
构造方法的重载:
如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法
构造器在继承时的要求
问题:
- 父类的构造器会不会继承到子类中?答:不会
- 父类的构造器和子类有没有关系?
A:子类在继承父类时,默认会在子类的构造器首行,加一句代码 super(); 表示调用父类的无参构造。
B:那么如果父类没有无参构造,子类构造器中没有做特别处理的话,编译是要报错的。
C:那么如果父类没有无参构造,子类构造器中首行一定要明确调用父类的哪个有参构造, 同时super(实参列表)的方式确定
D:如果父类既有无参构造,又有有参构造, 那么没写super(实参列表);,就表示调用父类的无参构造, 除非你写了super(实参列表);。 换句话说,调用父类的无参构造super();可写可不写。
- 为什么子类的构造器一定要调用父类的构造器呢?
因为子类会继承父类所有的成员变量,那么在new子类对象时,必须为这些继承成员变量“初始化”, 而为这些成员变量初始化,最合适的就是通过父类的构造器。