java - 子类问题(JAVA)

标签 java

我有一个带有字段的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和子类OnetimeDailyMonthly 。约会有描述(例如,“看牙医”)和日期。编写一个方法 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/

相关文章:

java - 按住按键时 Swing 中的文本输入字段在 OS X 上停止工作

java - 获取错误消息 ServletActionRedirectResult 与 ServletDispatcherResult 不兼容

java - C服务器和java客户端

java - Android getSelectedItem,如何使用?

java - 如何使用 JSON.org 在 java 中反序列化 JSON

java - 使用 Twitter4j 获取特定推文的 Collection 计数

java - 无法使用 ajax 将数组值发送到 java Controller

java - JSF 注销页面 - 最佳实践 : is it correct to use one common bean?

java - j2ee服务层自动化测试用例

java - Oppo、Vivo、MIUI等定制OS手机如何处理FCM通知?