簡體   English   中英

父類的重寫方法

[英]Overriding method from parent class

嘗試訪問我的 Date 父類中的 isLeapYear 方法。 我已經在 J​​ulianDate 子類中定義了該方法。 如何正確實現子類以使用正確的方法?

JulianDate(子類):

class JulianDate extends Date {

    public JulianDate() {
        super(1, 1, 1);
        addDays(719164);
        addDays((int) ((System.currentTimeMillis() + java.util.TimeZone.getDefault().getRawOffset()) / 1000 / 60 / 60 / 24));
    }
    public JulianDate (int y, int m, int d) {
        super(y, m, d);
    }
    public boolean isLeapYear(int year) {
        return year % 4 == 0;
    }

這是我在父類(Date)中提出的關於 isLeapYear 的內容:

Date JDate = new JulianDate();
        JulianDate.isLeapYear();

    public boolean isLeapYear() {
        return isLeapYear(this.year);
    }

我在父子類中缺少什么來完成這項工作? 我希望子類計算閏年並覆蓋父方法。

子類將繼承其父類的所有方法。 您不需要在子類中再次定義它們。 因此,如果您希望父類( Date )檢查閏年,則在Date類中定義該方法,並從JulianDate刪除isLeapYear方法。 如果你想讓子類檢查它,你需要覆蓋父類的方法。

是自制Date類的最后一段代碼嗎?如果是這樣,它似乎沒有正確定義。 它缺少一個構造函數,並且由於某種原因有一個方法調用,它不應該。


評論后添加

class Parent {
int number;

    public Parent (int number) {
    this.number = number;
    }
    public int getNumber ()  {
    return number;
    }
}

class Child extends Parent {
super() {
}
@override
public int getNumber () {
return this.number;
}

}


Child demo = new Child(10);
demo.getNumber(); //uses the child method getNumber.

但是,我只會從父類中刪除 getNUMber(或在您的情況下為閏年),並且在子類中只有一個函數。 通過將相同的函數放入兩個類中,您正在復制代碼,這不是好的做法。

class JulianDate 擴展日期 {

public JulianDate(){
    super(1, 1, 1);
}

public JulianDate(int y, int m, int d) {
    super(y,m,d);
}

public boolean isLeapYear() {
    boolean leap = false;
    if(getYear() % 4 == 0)
    {
        if( getYear() % 100 == 0)
        {
            // getYear() is divisible by 400, hence the getYear() is a leap getYear()
            if ( getYear() % 400 == 0)
                leap = true;
            else
                leap = false;
        }
        else
            leap = true;
    }
    else
        leap = false;

    return leap;
}

public boolean isLeapYear(int y) {
    this.setYear(y);


      return  this.isLeapYear();
   }
    public static void main(String [] ar){

    JulianDate julianDate= new  JulianDate(1988, 02, 21);

    System.out.println(julianDate.isLeapYear());

    JulianDate julianDate2= new  JulianDate();

    System.out.println(julianDate2.isLeapYear(1988));


 }
}

希望這會幫助你。

class JulianDate extends Date {

 public JulianDate() {}

 public boolean isLeapYear(int year) {
    return year % 4 == 0;
 }
}

你可以像這樣使用它

Date date = new JulianDate();
boolean isLeapYear = date.isLeapYear(2020);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM