为什么需要使用多个构造函数?

新手上路,请多包涵

我现在正在学习 Java,并且刚刚了解了构造函数是什么。我不明白如果需要初始化所有变量,为什么需要多个构造函数。

原文由 Tren46 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 582
2 个回答

一个类可以有多个构造函数,只要它们的签名(它们采用的参数)不相同即可。您可以根据需要定义任意数量的构造函数。当一个 Java 类包含多个构造函数时,我们说构造函数被重载(有多个版本)。这就是构造函数重载的意思,一个 Java 类包含多个构造函数。

话虽如此,是否要在类中创建多个构造函数完全取决于您的实现,但在许多情况下拥有多个构造函数可以让您的生活变得轻松。假设下面的类没有默认构造函数:

 public class Employee {

    private int age;
    private String name;

    Employee(int age, String name){
        this.age=age;
        this.name=name;
    }
}

因此,在创建此类的对象时,用户只有手头有年龄和名称参数才能这样做,这限制了 Java 对象的真正功能,因为对象的状态应该能够在初始化后随时修改和填充。

原文由 Harish Vashist 发布,翻译遵循 CC BY-SA 3.0 许可协议

简而言之,您使用多个构造函数是为了方便(第一个示例)或允许完全不同的初始化方法或不同的源类型(第二个示例。

您可能需要多个构造函数来实现您的类,以简单地允许省略一些已经设置的参数:

 //The functionality of the class is not important, just keep in mind parameters influence it.
class AirConditioner{
   enum ConditionerMode{
      Automatic, //Default
      On,
      Off
   }
   public ConditionerMode Mode; //will be on automatic by default.
   public int MinTemperature = 18;
   public int MaxTemperature = 20;

   public AirConditioner(){ //Default constructor to use default settings or initialize manually.
      //Nothing here or set Mode to Automatic.
   }

   //Mode
   public AirConditioner(ConditionerMode mode){ //Setup mode, but leave the rest at default
      Mode = mode;
   }
   //setup everything.
   public AirConditioner(ConditionerMode mode, int MinTemp, int MaxTemp){
      Mode = mode;
      MinTemperature = MinTemp;
      MaxTemperature = MaxTemp;
   }
}


另一个例子是当不同的构造函数遵循不同的过程来初始化变量时。例如,您可以有一个只显示文本表的数据表。构造函数可以从数据库或文件中获取数据:

 class DataTable{
   public DataTable(){} //Again default one, in case you want to initialize manually

   public DataTable(SQLConnection con, SQLCommand command){
      //Code to connect to database get the data and fill the table
   }

   public DataTable(File file){
      //Code to read data from a file and fill the table
   }
}

原文由 Zero 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题