Доступ к частному Int в подклассе - PullRequest
0 голосов
/ 23 марта 2012

Исходный код суперкласса

public class Date {
private int month; 
private int day; 
private int year; 


public Date() {
setMonth(1);
**day = 1;**
setYear(1900);
}

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

Месяц и год работают нормально, потому что я могу использовать setMonth и setYear в моем подклассе. Однако, когда я пытаюсь использовать day, он говорит, что var не виден, потому что он закрытый. В суперклассе нет сеттера на день, но есть геттер. Как должен выглядеть сеттер? Кроме того, как должен выглядеть мой конструктор подкласса?

Конструктор подкласса

public EDate(int month, int day, int year) 
{

this.setMonth(month);
day = getDay();
this.setYear(year);
}

Подклассный сеттер

public void setDay(int newInt) {
if (isGooddDate(getMonth(), newInt, getYear())==true)
{    
newInt = this.getDay();
}

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 23 марта 2012

Я не думаю, что в первую очередь нужно создавать подкласс для вашего класса Date. Причина в том, что функциональность Date останется неизменной, независимо от того, что произойдет. Так что нет необходимости в конструкторе подкласса.

А что касается установщика даты, вы идете в правильном направлении:

public void setDate(int dateValue) {
    if(isDateValid(dateValue)) {
        date = dateValue;
    } else {
        throw new Exception("Invalid date");
    }
}

Если у вашего класса есть поддержка времени, вы могли бы действительно написать лучшее решение. Преобразуйте значение даты во времени, независимо от того, какая дата. Во время хранения конвертируйте время в соответствующую дату. Вот как работает встроенный класс DateTime.

например: если вы храните 2006-16-80, он будет сохранен как 2007-06-19, а не как исключение. Просто мысль!

...