如何将对象作为参数传递给另一个类的构造函数?

时间:2016-09-27 09:12:34

标签: java oop constructor

我有这个java程序,其中创建了person类列表... dateofBirth是person's类中的对象参数。现在我面临一个问题;如何在列表中初始化person对象或如何将DateOfBirth对象传递给Person的构造函数?

class DateOfBirth{
    private int year;
    private int month;
    private int day;

    DateOfBirth(){
        this.year = 0;
        this.month = 0;
        this.day = 0;
    }

    DateOfBirth(int y, int m, int d){
        if(y>1900){
            year = y;
        }
        else{
            System.err.println("the year is too small too old" );           
        }
        if(0<month && month<13){
            month = m;
        }
        else{
            System.err.println("month should be within 1 to 12.");
        }
        if(0<day && day<30){            
            day = d;
        }           

    }


    public int getYear() {
        return year;
    }

    public int getMonth(){
         return month;
     }
    public int getDay(){
        return day;
    }

}
class Person{
    private String name;
    private int age;
    private DateOfBirth Dob;

    public Person(String name, int age, DateOfBirth dob){
    this.name = name;
    this.age = age;
    this.Dob = dob;
    }

    public String getName() {
        return name;
    }

    public DateOfBirth getDob() {
        return Dob;
    }    

    public int getAge() {
        return age;
    }

}

public class MyList {
    ArrayList<Person> Personlist = new ArrayList<Person>();

    Person person=new Person("John",23,...) // how to pass the DateOfBirth object here?     

}

4 个答案:

答案 0 :(得分:5)

先制作日期,然后将其作为参数传递

 public class MyList {
        ArrayList<Person> Personlist = new ArrayList<Person>();

DateOfBirth date = new DateOfBirth(2000, 1, 1);
    Person person = new Person("John", 16, date);

}

希望这会有所帮助。

答案 1 :(得分:2)

在你需要的地方创建DateOfBirth的对象,然后简单地将它传递给像这样的构造函数

public class MyList {
        ArrayList<Person> Personlist = new ArrayList<Person>();

DateOfBirth dob= new DateOfBirth(1992, 2, 3);
    Person person=new Person("John",23,dob);

}

答案 2 :(得分:2)

作为@TeunVanDerWijst答案的补充,您还可以在类Person中创建另一个构造函数,该构造函数将在Person类本身中创建实例。构造函数可能如下所示。

public Person(String name, int age, int y, int m, int d) {
    this(name, age, new DateOfBirth(y, m, d));
}

this只会调用另一个构造函数,然后该构造函数将分配新生成的DateOfBirth实例。

现在,您只需将年份,月份和日期作为Person传递即可创建int的实例。

 Person person=new Person("John", 23, 2000, 9, 12);

答案 3 :(得分:0)

如果dateofbirth属于人,则不需要创建新的DateOfBirth对象

做到这一点很简单:

Person person = new Person("John",23,new DateOfBirth(1985,5,5));

甚至喜欢:

try
{
    Personlist.Add(new Person("John",23,new DateOfBirth(1985,5,5)));
}
catch(Exception ex)
{
   //
}

建议永远不要使用像MyList这样的类名。 列表是集合,MyList是???新的收藏类型?它有什么? 尝试制作名称,即使有人不知道程序在做什么也能理解目的。