构造器(构造方法)的新手理解

本文深入解析构造器的概念、特征与作用,探讨其语法格式,并通过实例演示构造器在类继承中的应用,包括this和super关键字的使用,以及不同情况下构造器的调用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、构造器的定义与作用

1.构造器的特征:

具有和类相同的名称;不含返回值 ;如果没有构造器,系统默认提供。

2.作用:

为创建的对象执行初始化

 

3.语法格式:

<修饰符><类名>([<参数列表>]){

[<语句>]

}

public student(){  }         //无参构造方法

public student(String name,int age){ 

this name = name;

this age = age;

}               //有参构造方法

4.构造器中的this和super

this:哪个对象调用构造器就指向哪个对象!

super:调用父类的构造器;

5.构造器中的继承及调用

执行子类构造器时一定会调用父类构造器。如果要调用有参的父类构造器,就必须在子类构造器的第一行写上super()

具体例子如下!!!

类型一:子类父类都包含有参构造器和无参构造器,创建一个无参构造器的对象

public class Demo03Zi extends Demo03Fu {
    public Demo03Zi(){
                //这里缺省调用了一个super();
                System.out.println("子类无参构造器");
    }
    public Demo03Zi(int num){
              System.out.println("子类有参构造器");
    }
       public static void main(String[] args) {
      //  Demo03Zi zi = new Demo03Zi();
        Demo03Zi z = new Demo03Zi();
    }
}


public class Demo03Fu {
    
    public Demo03Fu(){
        System.out.println("父类无参构造器");
    }
    public Demo03Fu(int num){
        System.out.println("父类带参构造器");
    }
}

输出:
父类无参构造器
子类无参构造器

类型二:子类父类都包含有参构造器和无参构造器,创建一个有参构造器的对象

public class Demo03Zi extends Demo03Fu {
    public Demo03Zi(){
                        System.out.println("子类无参构造器");
    }
    public Demo03Zi(int num){
        //这里也隐式调用了一个super(); 如果要调用父类有参构造方法,那就要显示调用了super(3);
        //具体如下个例子
                    System.out.println("子类有参构造器");
    }
       public static void main(String[] args) {
       Demo03Zi zi = new Demo03Zi(44);
      // Demo03Zi z = new Demo03Zi();
    }
}

public class Demo03Fu {

    public Demo03Fu(){
        System.out.println("父类无参构造器");
    }
    public Demo03Fu(int num){
        System.out.println("父类带参构造器");
    }
}

输出:
父类无参构造器
子类有参构造器

类型三:子类父类都包含有参构造器和无参构造器,创建一个有参构造器的对象。在有参构造函数下使用带参super;

public class Demo03Zi extends Demo03Fu {
    public Demo03Zi(){
        System.out.println("子类无参构造器");
    }
    public Demo03Zi(int num){
        super(45);
        System.out.println("子类有参构造器");
    }
       public static void main(String[] args) {
       Demo03Zi zi = new Demo03Zi(44);
      // Demo03Zi z = new Demo03Zi();
    }
}

public class Demo03Fu {

    public Demo03Fu(){
        System.out.println("父类无参构造器");
    }
    public Demo03Fu(int num){
        System.out.println("父类带参构造器");
    }
}

输出:
父类带参构造器
子类有参构造器

类型四:子类包含有参构造器和无参构造器,父类仅有一个有参构造方法,创建一个无参构造器的对象。

public class Demo03Zi extends Demo03Fu {
    public Demo03Zi(){
        System.out.println("子类无参构造器");
    }
    public Demo03Zi(int num){
              System.out.println("子类有参构造器");
    }
       public static void main(String[] args) {
      // Demo03Zi zi = new Demo03Zi(44);
       Demo03Zi z = new Demo03Zi();
    }
}

public class Demo03Fu {
   /* public Demo03Fu(){
        System.out.println("父类无参构造器");
    }*/
    public Demo03Fu(int num){
        System.out.println("父类带参构造器");
    }
}

输出:
报错!!
原因:因为创造对象的构造器是无参的,但是在父类构造器中又找不到无参构造器。

其余的差不多啦,掌握继承中构造器的执行顺序。及this和super的用法就好了;再看个其他的

//条件是子类有参无参构造器都有,父类仅有有参。创建带参的对象
public class Demo03Zi extends Demo03Fu {
    public Demo03Zi(){
        //this(); //这里如果使用this,这里的this表示调用该构造器外的其他构造器-->public             
                   //Demo03Zi(int num)这个有参构造器,但是呢你没带参数,所以报错
        //         //这里你什么都不写,默认带一个super,但是向上找呢,没有父类无参构造器,所            
                   //以报错
        this(33);  //这个才符合。
        System.out.println("子类无参构造器");
    }
    public Demo03Zi(int num){
       // this();
        super(34);
        System.out.println("子类有参构造器");
    }
       public static void main(String[] args) {
      // Demo03Zi zi = new Demo03Zi(44);
       Demo03Zi z = new Demo03Zi(43);
    }
}

public class Demo03Fu {
  /*  public Demo03Fu(){
        System.out.println("父类无参构造器");
    }*/
    public Demo03Fu(int num){
        System.out.println("父类带参构造器");
    }
}

输出:
父类带参构造器
子类有参构造器

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值