我有一个带有字段的Appointment
类:
国际日
整月
年份
字符串描述
这存储约会的描述以及日期。
super 类预约
:
public class Appointment {
int dayNum;
int monthNum;
int yearNum;
String desc;
public Appointment(String des, int day) {
//Monthly Appointments (Check day)
desc = des;
dayNum = day;
}
public Appointment(String des, int day, int month){
//Yearly Appointments (Check day AND month)
desc = des;
dayNum = day;
monthNum = month;
}
public Appointment(String des, int day, int month, int year){
//One Time (Check All)
desc = des;
dayNum = day;
monthNum = month;
yearNum = year;
}
}
这是我的 3 个子类:
一次性约会: 一次性
public class OneTime extends Appointment{
public OneTime(String des, int day, int month, int year){
super(des, day, month, year);
}
public String getDesc(){
return desc;
}
}
每月一次约会: 每月
public class Monthly extends Appointment{
public Monthly(String des, int monum){
super(des, monum);
}
public String getDesc(){
return desc;
}
}
每年一次约会 每年
public class Yearly extends Appointment{
public Yearly(String des, int day, int month){
super(des, day, month);
}
public String getDesc(){
return desc;
}
}
问题:我被要求将一些不同的Appointment
对象添加到ArrayList
(我知道)。但是,我必须编写一个方法 occurrsOn(int day, int Month, intyear)
来返回当天的所有约会。我不确定的部分是编写 occurrsOn()
方法。假设我有一个 11/22/2018 的约会,我如何将每月对象与日期参数进行比较/每年与月份和日期参数进行比较/OneTime
与所有参数进行比较?
教科书问题:“实现父类(super class)Appointment
和子类Onetime
、Daily
和Monthly
。约会有描述(例如,“看牙医”)和日期。编写一个方法 occurrsOn(intyear, intmonth,intday)
来检查约会是否发生在该日期。例如,对于每月的约会,您必须检查该月的日期是否匹配。然后用约会的混合填充 Appointment
对象的数组。让用户输入日期并打印出该日期发生的所有约会。”
注意:这不是我的作业。我刚刚在 2 小时内对此进行了单元测试,但遇到了困难。
最佳答案
首先,您可能需要声明 Appointment
抽象,以便子类必须实现一些方法:
public abstract class Appointment {
int dayNum;
int monthNum;
int yearNum;
String desc;
public Appointment(String des, int day){desc = des; dayNum = day;} //Monthly Appointments (Check day)
public Appointment(String des, int day, int month){desc = des; dayNum = day; monthNum = month;} //Yearly Appointments (Check day AND month)
public Appointment(String des, int day, int month, int year){desc = des; dayNum = day; monthNum = month; yearNum = year;} //One Time (Check All)
abstract boolean occursOn(int day, int month, int year);
abstract String getDesc();
}
然后,您的类中 occurrsOn
的实现可能是:
每月
boolean occursOn(int day, int month, int year){
return (this.day == day);
}
每年
boolean occursOn(int day, int month, int year){
return (this.day == day) && (this.month == month);
}
一次性
boolean occursOn(int day, int month, int year){
return (this.day == day) && (this.month == month) && (this.year == year);
}
最后,假设 appointments
是一个用子类的各种实例填充的 List
,有一个通用方法(可能在您的主类中),它将返回所有相应 Appointment
对象的列表:
public List<Appointment> occursOn(int year, int month, int day){
List<Appointment> result = new ArrayList<Appointment>();
for(Appointment appointment : appointments){
if(appointment.occursOn(year, month, day))
result.add(appointment);
}
return result;
}
关于java - 子类问题(JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35484021/