2012-01-10 49 views
1

我用自己的私有變量編寫了我的類,然後編寫了訪問這些變量所需的訪問器和增量方法,但是在編寫主類之後運行它時,這不起作用。 ?爲什麼是發生在這裏查看我的代碼:我寫了Accessors和Mutators方法,但仍然無法訪問私有變量!爲什麼?

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

Java沒有語法糖,如C#和不允許即使您提供了訪問方法,您也可以從object.property撥打電話。屬性純粹是一種設計模式,並不反映在語言本身的語法中。

你需要明確地打電話給他們,如d1.setMonth("February ");String val = d1.getMonth();

+0

好吧,我確實通過他們的設置方法調用了它們,實際上它也不起作用 – AbdullahR 2012-01-10 23:25:37

+0

因爲,您永遠不允許更新字段 - 「if(month.length()> 0)」,我認爲您的意思是'if(m.length()> 0)'。這同樣適用於其他制定者。 – Krizz 2012-01-10 23:27:52

+0

糟糕!是的,我相信那是我的錯誤。謝謝你! – AbdullahR 2012-01-10 23:37:14

6

訪問器方法應該被調用。而已。

d1.setMonth("February"); 
d1.setDay(13); 
+0

謝謝!那只是最大的錯誤!無論如何,謝謝你 – AbdullahR 2012-01-10 23:38:12

0

私人成員可以直接訪問僅在同一類的成員之內。 DateTest是另一個類,因此以下是不可能的

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

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

使用相應的設置方法替換上面的代碼。

+1

@AbdullahR - 只是寫他們是不夠的。你應該明確地使用它們 – 2012-01-10 23:30:43

1

總是使用setter和getter來訪問私有變量。

相關問題