我现在正在学校学习面向对象的编程,有一些方面我还不太了解。我有一个程序,用他们的名字和生日创建一个用户数据库。所以我有3个类:person,PersonProgram(主要)和Date。 Person类具有名称和出生日期的构造函数,设置器和getter。 Date类有错误检查正确的日期和闰年等。在主程序中我创建了5个人,然后给出菜单选项来更改和修改名称和日期。例如,如果用户想要更改名称,我的代码如下所示:
System.out.println("Enter new first name:");
people[choice-1].setFirstName(input.next());
这对我来说很有意义。但我想知道如何正确更改日期? Date构造函数占用日,年和月的3个整数,因此在主程序中,我提示用户输入以日,月,年整数存储的3个新日期。所以我的理解是从那里我将这3个整数传递给Date构造函数:
new Date(month, day, year);
我感到困惑的是从哪里开始。 Date构造函数获取新的Date调用,并将其传递给setter。如何将这个新创建的日期对象传递回Person程序,那么生日期的Person中的setter可以更新相应的Person对象吗?如果我不清楚我的问题请告诉我,我想我可以在不发布所有代码的情况下明确表达我想要的内容。
答案 0 :(得分:1)
在Person
课程中你应该有这样的内容:
public class Person {
private Date birthDate;
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate){
this.birthDate = birthDate;
}
}
然后你会将birthDate
设置为:
person[choice-1].setBirthDate(new Date(month,day,year));
考虑到你从 OOP 开始,这里有一个重要的概念,封装,Person
类限制对其字段的免费访问,如birthDate
,并设置与它们交互的规则。例如,您可以在分配之前检查日期是否为空。
public void setBirthDate(Date birthDate){
if(birthDate != null) {
this.birthDate = birthDate;
} else {
//Whatever you wanna do here (throw an Exception, etc, etc)
}
}
评论问题
虽然最好再创建一个问题:
我是否必须在Person类中创建Date类的实例?或者在任何地方?
不,属性/字段birthDate
是引用到Date
对象,它将存储在内存中,直到没有引用为止。这取决于你在哪里创建它们,但仍然有创建模式,一个设计模式的家族,可以帮助你解决这个问题。
答案 1 :(得分:0)
是类型'日期'?
的出生日期如果是这样,你应该创建你的类Date的实例,做你需要的控件并将它传递给persson实例中的出生日期的构造函数或setter。
Date birthDate = new Date(month, day, year);
// Some controls
people[choice-1].setBirthDate(birthDate);
答案 2 :(得分:0)
Date the_birth_date = new Date(mounth, day, year);
people[choice - 1].setBirthDate(the_birth_date);
答案 3 :(得分:0)
您可以这样设置:people[choice-1].setBirthday(new Date(month, day, year));
。您必须先选择选择Person。