Java之构造器

构造器

  1.构造器,也称构造方法、构造函数。作用是构造出来一个类的实例,确保对象得到初始化
  2.构造器的格式: 权限修饰符 类名(无参/有参){}
  3.如果类中没有构造器时Java编译器会自动创建无参构造函数,我们可省略不写无参构造函数,实例化对象时无需赋值,但是倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错,倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错,这时就要自己写上无参的构造函数,所以类中一般都要存在无参构造函数,否则实例化对象时必须赋值(要么有参和无参都不写,要么都写)。

构造函数的调用

class SuperClass {
  private int n;
  SuperClass(){
    System.out.println("SuperClass()");
  }
  SuperClass(int n) {
    System.out.println("SuperClass(int n)");
    this.n = n;
  }
}
// SubClass 类继承
class SubClass extends SuperClass{
  private int n;
  
  SubClass(){ // 自动调用父类的无参数构造器
    System.out.println("SubClass");
  }  
  
  public SubClass(int n){ 
    super(300);  // 调用父类中带有参数的构造器
    System.out.println("SubClass(int n):"+n);
    this.n = n;
  }
}
// SubClass2 类继承
class SubClass2 extends SuperClass{
  private int n;
  
  SubClass2(){
    super(300);  // 调用父类中带有参数的构造器
    System.out.println("SubClass2");
  }  
  
  public SubClass2(int n){ // 自动调用父类的无参数构造器
    System.out.println("SubClass2(int n):"+n);
    this.n = n;
  }
}
public class TestSuperSub{
  public static void main (String args[]){
    System.out.println("------SubClass 类继承------");
    SubClass sc1 = new SubClass();
    SubClass sc2 = new SubClass(100); 
    System.out.println("------SubClass2 类继承------");
    SubClass2 sc3 = new SubClass2();
    SubClass2 sc4 = new SubClass2(200); 
  }
}

运行结果:

------SubClass 类继承------
SuperClass()
SubClass
SuperClass(int n)
SubClass(int n):100
------SubClass2 类继承------
SuperClass(int n)
SubClass2
SuperClass()
SubClass2(int n):200

java中,子类为什么会自动继承父类的无参构造方法?

  其实这句话本身就是错误的。因为构造函数不能继承,只能被调用。 正确的说法应该是,Java中子类会自动调用父类的无参构造方法。那么,子类为什么会自动调用父类的无参构造方法呢?其实可以理解成(子类继承了父类,其实就是相当于实例化子类也就实例化了父类,所以并不是会只自动继承父类的无参构造函数,只要子类和父类有一样的有参构造函数,一样会继承)。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。

  子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中,明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了。

 

posted on 2020-05-13 17:42  三尺青峰  阅读(281)  评论(0)    收藏  举报

导航