2

我正在当地大学学习编程课程。我的导师英语说得不是很好,所以有时很难理解他的要求。

我已经完成的作业的第一部分如下: 一家机械车间有 100 个客户,每个客户是一个数组中的一个对象,其中包含各种数据。基类是服务,并且有四个特定服务(轮胎、机油、散热器和刹车)的派生类。每个客户都被分配了一项服务。打印所有客户的详细信息列表。

第二部分,我完全不明白他在问什么:如果上一次服务是在几个月前完成的,我们正在打印优惠券。我已经计算了日期,如果服务是在一定时间之前完成的,我需要将服务数组中的一个对象传递给抽象优惠券类。他的确切指示如下:

优惠券是一个抽象父类。抽象类应该有可变的年、月和日。使服务优惠券扩展抽象优惠券类。几个子类 - BrakeService 优惠券、轮胎优惠券、发动机油优惠券、散热器优惠券扩展了服务优惠券。将到期日期添加到 2013 年的随机日期,并在对象的构造函数中将其设为最终日期。服务对象通过服务对象调用优惠券。优惠券确定它接收的服务对象的类型并相应地打印消息。这应该很简单。

这就是我认为它所要求的(纯粹是为了证明我们知道如何使用抽象和继承的练习):

http://www.java-forums.org/attachments/new-java/4632-passing-object-abstract-class-rtc3ild.png

我应该将对象传递给抽象类吗?如果是这样,我应该参加我的主要课程并将其作为抽象优惠券课程的扩展吗?

我现在拥有的是扩展具体 Service 类的抽象 Coupon 类,ServiceCoupon 类扩展 Coupon,以及四个扩展它的具体类。我不确定如何调用 Coupon 类或将其基类中的对象传递给它。

对不起,我不能更清楚。我也不知道他想要什么。

编辑: **我遇到的主要问题是我想将一个对象传递给另一个抽象的类。我无法实例化这个类,因为它是抽象的,所以我不知道如何将对象传递给方法。

4

3 回答 3

1

我认为他想要的是一种工厂模式,即你传入你Service的,工厂确定类型,Service然后返回适当的Coupon实现。基于 a 的东西Map可能会奏效

final Map<Class<? extends Service>, Class<? extends Coupon>> myMap;

public Coupon getCoupon(final Service service) {
  final Coupon coupon = myMap.get(service.getClass()).newInstance();
  //init stuff
  return coupon;
}

显然,这只有在你有一个 noargs 构造函数的Coupon.

于 2013-03-10T16:37:51.137 回答
0

优惠券不应扩展 Service 类。您应该有两棵继承树,一棵用于优惠券,一棵用于服务。

于 2013-03-10T16:39:51.500 回答
0

我想问题的第二部分是要求这样的事情:

import java.util.*;
abstract class Coupon
{
    int year;
    int month;
    int day;
}
class Service extends Coupon
{
    public String getCouponMessage(Coupon coupon)
    {
        if (coupon instanceof BrakeService)
        {
            return "BreakService message";
        }
        else if (coupon instanceof Tire)
        {
            return "TireService message";
        }
        else if (coupon instanceof Engine_Oil)
        {
            return "Engin_Oil Message";
        }
        else if (coupon instanceof Radiator)
        {
            return "Radiator Message";
        } 
        else
        {
            return "Invalid Service";
        }
    }
}
class BrakeService extends Service
{
    final Date exp_date;
    public BrakeService(int day,int month , int year)
    {
        Calendar cal = Calendar.getInstance();
        this.day = day;
        this.month=month;
        this.year=year;
        cal.set(year, month, day);
        exp_date = cal.getTime();
    }
}
class Tire extends Service
{
    final Date exp_date;
    public Tire(int day,int month , int year)
    {
        Calendar cal = Calendar.getInstance();
        this.day = day;
        this.month=month;
        this.year=year;
        cal.set(year, month, day);
        exp_date = cal.getTime();
    }
}
class Engine_Oil extends Service
{
    final Date exp_date;
    public Engine_Oil(int day,int month , int year)
    {
        Calendar cal = Calendar.getInstance();
        this.day = day;
        this.month=month;
        this.year=year;
        cal.set(year, month, day);
        exp_date = cal.getTime();
        System.out.println(exp_date);
    }
} 
class Radiator extends Service
{
    final Date exp_date;
    public Radiator(int day,int month , int year)
    {
        Calendar cal = Calendar.getInstance();
        this.day = day;
        this.month=month;
        this.year=year;
        cal.set(year, month, day);
        exp_date = cal.getTime();
    }
}
于 2013-03-10T17:23:19.057 回答