Переопределение метода из родительского класса - PullRequest
3 голосов
/ 17 марта 2020

Попытка получить доступ к методу isLeapYear в моем родительском классе Date. Я уже определил метод в дочернем классе JulianDate. Как правильно реализовать дочерний класс в go для правильного метода?

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;
    }

Это то, что я придумал в своем родительском классе (Дата) относительно isLeapYear:

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

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

Что такое Мне не хватает в родительском и дочернем классе, чтобы сделать эту работу? Я хочу, чтобы дочерний класс рассчитал високосный год и переопределил родительский метод.

Ответы [ 3 ]

0 голосов
/ 17 марта 2020
class JulianDate extends Date {

 public JulianDate() {}

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

и вы можете использовать его, как,

Date date = new JulianDate();
boolean isLeapYear = date.isLeapYear(2020);
0 голосов
/ 17 марта 2020

класс 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));


 }
}

Надеюсь, это поможет вам.

0 голосов
/ 17 марта 2020

Дочерний класс наследует все методы своего родительского класса. Вам не нужно определять их снова в дочернем классе. Поэтому, если вы хотите, чтобы родительский класс (Date) проверял високосный год, определите метод в Date class и удалите метод isLeapYear из JulianDate. Если вы хотите, чтобы дочерний класс проверил его, вам необходимо переопределить метод родительского класса.

Является ли последний фрагмент кода из класса selfmade 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 (или leapyear в вашем случае) от родителя и есть только функция для него в дочернем классе. Помещая одну и ту же функцию в оба класса, вы дублируете код, что не является хорошей практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...