1、构造器的作用
new对象,并在new对象的时候为实例变量赋值。
2、构造器的语法格式
构造器又称为构造方法,那是因为它长的很像方法。但是和方法还是有所区别的。
【修饰符】 class 类名{
【修饰符】 构造器名(){
// 实例初始化代码
}
【修饰符】 构造器名(参数列表){
// 实例初始化代码
}
}
public class Book {
private String bookName;
private String author;
private double price;
private String detail;
public Book() {
}//无参构造
public Book(String bookName, String author, double price, String detail) {
this.bookName = bookName;
this.author = author;
this.price = price;
this.detail = detail;
}//有参构造
}
注意事项:
1、构造器名必须与它所在的类名必须相同。
2、它没有返回值,所以不需要返回值类型,甚至不需要void
3、如果你不提供构造器,系统会给出无参数构造器,并且该构造器的修饰符默认与类的修饰符相同
4、如果你提供了构造器,系统将不再提供无参数构造器,除非你自己定义。
5、构造器是可以重载的,既可以定义参数,也可以不定义参数。
6、构造器的修饰符只能是权限修饰符,不能被其他任何修饰
3、this调用本类其他构造器
同一个类中,使用this(【实参列表】)可以实现构造器之间的相互调用。
this():调用本类的无参构造
this(实参列表):调用本类的有参构造
this(【实参列表】)只能出现在构造器内首行
注意:不能出现构造器递归调用
public class Book {
private String bookName;
private String author;
private double price;
public Book() {
this("book","author",150);
}
public Book(String bookName, String author, double price) {
this.bookName = bookName;
this.author = author;
this.price = price;
}
public Book(String bookName,double price){
this();
this.bookName = bookName;
this.price = price;
}
}
4、super调用父类构造器
在继承关系中,子类不会继承父类的构造器,子类构造器可以通过super(【实参列表】)来调用父类构造器。
子类的每个构造器中默认隐藏super(),即默认调用父类的无参构造器。
子类构造器中可以显示使用super(【实参列表】)来调用父类无参或有参构造器,那么默认隐藏的super()不再存在。
public class Book {//父类
private String bookName;
private String author;
private double price;
public Book() {
}
public Book(String bookName, String author, double price) {
this.bookName = bookName;
this.author = author;
this.price = price;
}
}
public class Novel extends Book{//子类
public Novel() {
}
public Novel(String bookName, String author, double price) {
super(bookName, author, price);
}
}
如果父类没有无参构造,则必须在子类构造器中显示使用super(实参列表)来调用父类构造器。
super(【实参列表】)只能出现在子类构造器的首行
总之:使用子类任意构造器创建对象时,必须要直接或间接通过super(【实参列表】)先调用执行父类构造器。