Java-构造方法

385 阅读2分钟

什么是构造器?构造器的作用是什么?

  1. 类的第三个成员(前两个是属性和方法)
  2. new对象,即new关键字后面出现的一定是构造器,也只能是构造器
  3. 在new对象的同时,给对象的“实例变量”初始化,即赋值

格式写法:

  1. 方法名与类名相同,大小写也要一致
  2. 没有返回值类型,连void都没有
  3. 没有具体的返回值(不能有return语句带回具体的结果)

执行时机:

  1. 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
  2. 不能手动调用构造方法

构造方法的创建:

  1. 如果一个类中没有编写任何构造方法,系统将会提供一个默认的无参数构造方法
  2. .如果手动编写了构造方法,系统就不会再提供默认的无参数构造方法
class student{
    private int age;
    public student(int age){
    this.age=age;
    }
}

student s1 = new stdent(23);

student s2 = new stdent(34);

构造方法的重载:
如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

构造器在继承时的要求

问题:

  1. 父类的构造器会不会继承到子类中?答:不会
  2. 父类的构造器和子类有没有关系?

A:子类在继承父类时,默认会在子类的构造器首行,加一句代码 super(); 表示调用父类的无参构造。

B:那么如果父类没有无参构造,子类构造器中没有做特别处理的话,编译是要报错的。

C:那么如果父类没有无参构造,子类构造器中首行一定要明确调用父类的哪个有参构造, 同时super(实参列表)的方式确定

D:如果父类既有无参构造,又有有参构造, 那么没写super(实参列表);,就表示调用父类的无参构造, 除非你写了super(实参列表);。 换句话说,调用父类的无参构造super();可写可不写。

  1. 为什么子类的构造器一定要调用父类的构造器呢?
    因为子类会继承父类所有的成员变量,那么在new子类对象时,必须为这些继承成员变量“初始化”, 而为这些成员变量初始化,最合适的就是通过父类的构造器。