2

私は地元の大学でプログラミングのコースを取っています。私のインストラクターは最高の英語を話せないので、時々彼が何を求めているのか理解するのが難しい.

私が既に完了している課題の最初の部分は次のとおりです。整備工場には 100 人の顧客がいて、それぞれがさまざまなデータを保持する配列内のオブジェクトです。Base クラスは Service で、特定のサービス (タイヤ、オイル、ラジエーター、およびブレーキ) の 4 つの派生クラスがあります。各顧客には 1 つのサービスが割り当てられます。詳細を含むすべての顧客のリストが印刷されます。

2 番目の部分は、彼が何を求めているのかまったくわかりません。最後のサービスが一定の数か月前に行われた場合、クーポンを印刷しています。日付の計算は既に行っています。サービスが一定時間前に行われた場合は、サービス配列内の 1 つのオブジェクトを抽象クーポン クラスに渡す必要があります。彼の正確な指示は次のとおりです。

Coupon は Abstract 親クラスです。抽象クラスには変数の年、月、日が必要です。Service Coupon で Abstract Coupon クラスを拡張します。いくつかの子クラス - BrakeService Coupon、Tire Coupon、Engine Oil Coupon、Radiator Coupon は Service Coupon を拡張します。2013 年のランダムな日付に有効期限を追加し、オブジェクトのコンストラクターでそれを final にします。サービス オブジェクトは、サービス オブジェクトを渡してクーポンを呼び出します。クーポンは、受け取るサービス オブジェクトのタイプを決定し、それに応じてメッセージを出力します。これは単純なはずです。

これが私が求めていると思うものです(純粋に、抽象と継承の使用方法を知っていることを示すための演習として):

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

オブジェクトを抽象クラスに渡すことになっていますか? もしそうなら、メインクラスを取得して、それを抽象クーポンクラスの拡張にする必要がありますか?

私が今持っているのは、具象 Service クラスを拡張する抽象 Coupon クラス、Coupon を拡張する ServiceCoupon クラス、およびそれを拡張する 4 つの具象クラスです。Coupon クラスを呼び出す方法や、基本クラスからオブジェクトを渡す方法がわかりません。

申し訳ありませんが、これ以上明確にすることはできません。彼も何がしたいのかわからない。

編集: **私が抱えている主な問題は、抽象化された別のクラスにオブジェクトを渡したいということです。このクラスは抽象的であるためインスタンス化できず、オブジェクトをメソッドに渡す方法がわかりません。

4

3 に答える 3

1

彼が望んでいるのはファクトリパターンだと思います。つまり、あなたがあなたを渡しService、ファクトリがタイプを決定してから適切な実装Serviceを返します。Couponに基づく何か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

クーポンはサービスクラスを拡張しないでください。2つの継承ツリーが必要です。1つはクーポン用、もう1つはサービス用です。

于 2013-03-10T16:39:51.500 に答える
0

質問の2番目の部分は、次のようなことを求めていると思います:

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 に答える