-1

これがコードです。Date クラスを使用して拡張し、ExtendedDate を作成する必要があります。とにかく Date クラスを変更することは想定されていません。あなたが提供できる助けに本当に感謝します。私はこれを解決する方法について無知です

public static void main(String[] args) {
    /* Trying to create a date with month = 3, date = 40, year = 2010. Objective to is throw an error/exception - "Date can't be created" */   
    ExtendedDate Dt1 = new ExtendedDate(03,40,2010);
    System.out.println(Dt1.getDay()); 
    //I don't want this statement to be executed because 40 is not valid. But it's printing "1" which is the default value for the default constructor
}

class ExtendedDate extends Date {
    // Default constructor
    // Data members are set according to super's defaults
    ExtendedDate() {
        super();
    }

    // Constructor that accepts parameters
    public ExtendedDate(int month, int day, int year)  {
        setDate(month, day, year);
    }

    @Override
    public void setDate(int monthInt, int dayInt, int yearInt) {
        if (isValidDate(monthInt, dayInt, yearInt)) 
        //isValidDate code is working perfectly fine.
        {
            super.setDate(monthInt, dayInt, yearInt);
        }
        else {
            System.out.println("Wrong Date");
        } 
    }

HEREは日付クラスです

public class Date {

    private int month; // instance variable for value of the date’s month

    private int day; // instance variable for value of the date’s day

    private int year; // instance variable for the value of the dates

    // Default constructor: set the instance variables to default values: month = 1; day = 1; year = 1900;
    public Date() {
        month = 1;
        day = 1;
        year = 1900;
    }

    // Constructor to set the date
    // The instance variables month, day, and year are set according to received parameters.

    public Date(int month, int day, int year) {
        this.month = month;
        this.day = day;
        this.year = year;
    }

    public void setDate(int month, int day, int year)
    {
        this.month = month;
        this.day = day;
        this.year = year;
    }

    public int getMonth()
    {
        return month;
    }

    public int getDay() {
        return day;
    }

    public int getYear() {
        return year;
    }
4

1 に答える 1

3

一部の引数が無効な場合は、IllegalArgumentException をスローする必要があります。

@Override
public void setDate(int month, int day, int year) {
    if (isValidDate(month, day, year)) {
        super.setDate(month, day, year);
    }
    else {
        throw new IllegalArgumentException("Invalid date");
    } 
}

例外の詳細については、Java チュートリアルを参照してください。

コンストラクターからオーバーライド可能なメソッドを呼び出すことは、悪い習慣であることに注意してください。isValidDate()コンストラクターから直接呼び出す必要があります(このメソッドがプライベートまたはファイナルであると仮定します)。

于 2013-03-30T00:00:30.650 に答える