Java 中的构造函数重载

Java中的构造函数重载是什么?

Java 构造函数重载是一种技术,其中一个类可以拥有任意数量的参数列表不同的构造函数。编译器通过考虑参数列表的数量及其类型来区分这些构造函数。

Account 类有效的构造函数的示例有

Account(int a);
Account (int a,int b);
Account (String a,int b);

示例 2:了解 Java 中的构造函数重载

步骤 1) 在编辑器中输入代码。

class Demo{
      int  value1;
      int  value2;
      /*Demo(){
       value1 = 10;
       value2 = 20;
       System.out.println("Inside 1st Constructor");
     }*/
     Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Constructor");
    }
    Demo(int a,int b){
    value1 = a;
    value2 = b;
    System.out.println("Inside 3rd Constructor");
   }
   public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
    Demo d1 = new Demo();
    Demo d2 = new Demo(30);
    Demo d3 = new Demo(30,40);
    d1.display();
    d2.display();
    d3.display();
 }
}

步骤 2) 保存、编译和运行代码。

步骤 3) 错误 = ?。在继续进行 Java 构造函数重载的下一步之前,尝试并调试错误

步骤 4) 每个类都有一个默认的Java 构造函数Demo 类的默认重载构造函数 Java 是Demo()。如果您不提供此构造函数,编译器会为您创建它,并将变量初始化为默认值。您可以选择覆盖此默认构造函数,并像示例 1 中所示那样将变量初始化为您期望的值。

但是,如果您指定一个参数化构造函数,如 Demo(int a),并且想要使用默认构造函数 Java Demo(),则您必须指定它。

换句话说,如果您的 Java 重载构造函数被覆盖,并且您想使用默认构造函数 Java,那么您需要指定它。

步骤 5) 取消注释第 4-8 行。保存、编译并运行代码。

为什么我们需要 Java 中的构造函数重载?

Java 中的构造函数重载允许一个类拥有多个构造函数,每个构造函数具有不同的参数列表。它提高了灵活性并改善了代码效率。

  • 对象创建的灵活性:构造函数重载允许您根据参数的数量或类型以各种方式初始化对象。
  • 代码可重用性:您可以通过使用 this() 关键字从一个构造函数调用另一个构造函数来重用构造函数逻辑。
  • 提高可读性:重载的构造函数通过为不同的初始化需求提供特定的构造函数选项,有助于使代码更直观。
  • 默认和自定义初始化:构造函数重载允许您轻松创建默认和自定义初始化的对象。

常见问题

构造函数是一个特殊的类,用于初始化新创建的对象,并在对象分配内存后立即调用。它可用于在创建对象时将对象初始化为期望值或默认值。编码器不一定要为类编写构造函数。

如果类没有提供用户定义的构造函数,编译器会将成员变量初始化为其默认值。

  • 数字数据类型设置为 0
  • char 数据类型设置为 null 字符(‘\0’)
  • 引用变量设置为 null

  1. 它具有与类相同的名称
  2. 它不应该返回值,甚至void 也不行

示例 1:创建您的第一个 Java 构造函数

步骤 1) 将以下构造函数程序键入 Java 编辑器

class Demo{
      int  value1;
      int  value2;
      Demo(){
         value1 = 10;
         value2 = 20;
         System.out.println("Inside Constructor");
     }
 
     public void display(){
        System.out.println("Value1 === "+value1);
        System.out.println("Value2 === "+value2);
    }
 
   public static void main(String args[]){
       Demo d1 = new Demo();
      d1.display();
  }
}

步骤 2) 保存、运行和编译 Java 中的构造函数程序,并观察输出。

预期输出

Inside Constructor
Value1 === 10
Value2 === 20

考虑一个子类扩展基类的情况。每当创建子类对象时,都会首先调用父类的构造函数。这称为构造函数链。

示例 3:了解构造函数链

步骤 1) 将以下代码复制到编辑器中。

class Demo{
   int  value1;
   int  value2;
    Demo(){
      value1 = 1;
      value2 = 2;
      System.out.println("Inside 1st Parent Constructor");
   }
   Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Parent Constructor");
   }
  public void display(){
     System.out.println("Value1 === "+value1);
     System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
     DemoChild d1 = new DemoChild();
     d1.display();
  }
}
class DemoChild extends Demo{
    int value3;
    int value4;
    DemoChild(){
    //super(5);
     value3 = 3;
     value4 = 4;
    System.out.println("Inside the Constructor of Child");
    }
    public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
      System.out.println("Value1 === "+value3);
      System.out.println("Value2 === "+value4);
   }
}

步骤 2) 运行代码。由于构造函数链,当创建子类 DemoChild 的对象时,首先调用父类 Demo() 的构造函数,然后创建子类的 DemoChild() 构造函数。

预期输出

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

步骤 3) 您可能会注意到父类 Demo 的构造函数已被覆盖。如果您想在创建子类对象时调用重载的构造函数 Demo(int a) 而不是默认构造函数 Demo() 怎么办?

在这种情况下,您可以使用“super”关键字来调用父类的重载构造函数。

语法:-

super();
--or--
super(parameter list);

示例:如果您的构造函数是Demo(String Name,int a),您将指定super(“Java”,5)。如果使用,super 关键字必须是子类构造函数中的第一行代码

步骤 4) 取消注释第 26 行并运行代码。观察输出。

输出

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4