Я написал методы Accessors и Mutators, но все же не могу получить доступ к закрытым переменным! Зачем? - PullRequest
1 голос
/ 11 января 2012

Я написал свой класс с его закрытыми переменными, а затем я написал методы доступа и мутатора, необходимые для доступа к этим переменным, но это не работает, когда я запускаю его после написания основного класса.Почему это происходит? Проверьте мой код здесь:

public class DateTest{
    public static void main (String [] args){

        Date d1 = new Date();
        Date d2 = new Date();

        d1.month = "February ";
        d1.day = 13;
        d1.year = 1991;

        d2.month = "July";
        d2.day = 26;
        d2.year = 1990;

        d1.WriteOutput();
        d2.WriteOutput();
        }
    }


      class Date {

private String month;
private int day;
private int year;

public String getMonth(){
    return month;
                     }
public int getDay(){
    return day;
                   }
public int getYear(){

    return year;    }

public void setMonth(String m){
    if (month.length()>0)
        month = m;
                      }
public void setDay(int d){
    if (day>0)
     day = d;       }
public void setYear(int y){
     if (year>0)
     year = y;
                          }

   public void WriteOutput(){
    System.out.println("Month " + month + "Day "+ day + " year" + year);
    }
    }

Пожалуйста, ребята, просто будьте терпеливы со мной, я действительно "начинающий" программист

Ответы [ 4 ]

6 голосов
/ 11 января 2012

Методы доступа должны быть вызваны. Вот и все.

d1.setMonth("February");
d1.setDay(13);
4 голосов
/ 11 января 2012

Java не имеет синтаксических сахаров, таких как C #, и не позволяет вам делать вызовы с object.property, даже если вы предоставили методы доступа. Свойства являются просто шаблоном проектирования и не отражаются в синтаксисе самого языка.

Вам нужно явно назвать их как d1.setMonth("February "); и String val = d1.getMonth();.

1 голос
/ 11 января 2012

Всегда используйте сеттеры и геттеры для доступа к закрытым переменным.

0 голосов
/ 11 января 2012

приватные члены могут быть доступны напрямую только внутри одного и того же класса.DateTest - это другой класс, и поэтому приведенное ниже невозможно

d1.month = "February ";
        d1.day = 13;
        d1.year = 1991;

        d2.month = "July";
        d2.day = 26;
        d2.year = 1990;

Замените приведенный выше код с использованием соответствующих методов установки.

...