Java中的构造函数重载:什么是&程序示例
什么是 Java 中的构造函数?
构造函数 是一种特殊方法,用于初始化新创建的对象,并在为该对象分配内存后立即调用。它可用于在创建对象时将对象初始化为所需值或默认值。编码者不必为类编写构造函数。
如果没有为类提供用户定义的构造函数,编译器会将成员变量初始化为其默认值。
- 数值数据类型设置为 0
- char 数据类型设置为空字符(‘\0’)
- 引用变量设置为空
在本教程中,您将学习-
- 创建构造函数的规则
- Java 中的构造函数重载
- 构造函数链接
创建 Java 构造函数的规则
- 同名 作为班级
- 它甚至不应该返回一个值 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
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 中的每个类都有一个默认的构造函数。 class Demo 的默认重载构造函数 Java 是 Demo() .如果您不提供此构造函数,编译器会为您创建它并将变量初始化为默认值。您可以选择覆盖此默认构造函数并将变量初始化为您想要的值,如示例 1 所示。
但是如果你指定一个像Demo(int a)这样的参数化构造函数,并且想使用Java Demo()的默认构造函数,你必须指定它。
换句话说,如果您在 Java 中的重载构造函数被覆盖,并且您想使用默认构造函数 Java,则需要指定它。
第 5 步) 取消注释 # 4-8 行。保存、编译并运行代码。
构造函数链接
考虑一个基类由子类扩展的场景。每当创建子类的对象时,首先调用父类的构造函数。这称为构造函数链接。
示例 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
java