为什么这个Java代码中有多个构造函数?

时间:2015-04-23 22:43:54

标签: java object constructor

在我的Java类(Java I)中听讲座时,我获得了一个打印参考表。这不是家庭作业,只是要了解对象,类和构造函数。我的问题是,多个构造函数是否必要?第一个只声明所有变量,第二个初始化它们。这可以在一个构造函数中完成吗?这是构造函数的代码。您非常欢迎您编写示例代码,或者只是帮助我了解我所看到的内容。我对施工人员来说很陌生。

public class Puppy 
{ 
    private String name;      // puppy's name
    private String breed;     // breed of dog
    private int age;          // chronological age of dog
    private String vet;       // name of vet

    public Puppy() 
    {
        name = " ";
        breed = " ";
        age = 0;
        vet = " ";
    } // end of Puppy constructor

    // method initializing data fields to specific values
    public Puppy(String n, String b, int a, String v) 
    {
        name = n;
        breed = b;
        age = a;
        vet = v;
    } // end of Puppy constructor 

4 个答案:

答案 0 :(得分:4)

这两个构造函数是为这个类的用户提供两种创建对象的方法:

  • 使用第一个构造函数的参数
  • 使用第二个Contructor的参数

基本上,如果用户没有提供任何值,第一个构造函数就会生效,并为实例变量提供默认值。

答案 1 :(得分:1)

没有构造函数声明对象的字段("变量")。他们在这里宣布:

private String name;      // puppy's name
private String breed;     // breed of dog
private int age;          // chronological age of dog
private String vet;       // name of vet

第一个构造函数只是创建了某种"空的" Puppy对象,而第二个提供了创建一些特定Puppy的能力。

此外,可以在声明部分中分配(初始化)值,因此您不再需要Puppy()

private String name = " ";
private String breed = " ";
private int age = 0;
private String vet = " ";

答案 2 :(得分:1)

About Overloading Methods

重载方法最受欢迎的一个例子是 System.out.println(),它允许你放置像String,基本类型甚至表达式这样的参数。

你这样做是因为你想要一个方法来处理不同类型的参数并做一些事情而不仅仅是崩溃。

在这种情况下,您正在重载构造函数,因此当您向该类创建实例(之前在类文件中定义)时传递的参数将是有效的。

我可以添加一个构造函数,这是在向创建对象后调用方法而向对象传递值的重点。

Person alicia = new Person("Alicia Roberts"); //the variable holding the full name is set.

Person alicia = new Person(); //create the object
alicia.setFullName("Alicia Roberts"); // pass a value by a method

答案 3 :(得分:1)

不,(通常)拥有多于1个构造函数不是必要。 超过1的原因是任何可能使用您的代码的方便

提供多个构造函数的原因通常是在调用构造函数时可能知道不同或不同数量的信息。 所以提供像

这样的构造函数
  

Puppy(String n,String b,int a,String v)

比让用户更方便:

Puppy p = new Puppy();
p.setName("Rover");
p.setAge(12);
p.setBreed("Mutt");
p.setVet("Dr. Dolittle");