【问题标题】:I wrote Accessors and Mutators methods, but still I cant access private variables! why?我写了 Accessors 和 Mutators 方法,但我仍然无法访问私有变量!为什么?
【发布时间】:2012-01-10 23:00:37
【问题描述】:

我用它的私有变量编写了我的类,然后我编写了访问这些变量所需的访问器和修改器方法,但是当我在编写主类之后运行它时不起作用。为什么会这样?在这里查看我的代码:

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

请大家耐心等待,我真的是一个“新手”程序员

【问题讨论】:

    标签: java class methods accessor mutators


    【解决方案1】:

    应该调用访问器方法。就是这样。

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

    【讨论】:

      【解决方案2】:

      Java 没有像 C# 这样的语法糖,即使您提供了访问方法,也不允许您从 object.property 进行调用。属性纯粹是一种设计模式,并没有反映在语言本身的语法中。

      您需要像 d1.setMonth("February ");String val = d1.getMonth(); 一样明确地调用它们。

      【讨论】:

      • 好吧,我确实用他们的 set 方法调用了它们,但实际上也不起作用
      • 因为,您永远不允许更新字段 - if (month.length()>0),我认为您的意思是 if (m.length() > 0)。这同样适用于其他二传手。
      【解决方案3】:

      始终使用 setter 和 getter 来访问私有变量。

      【讨论】:

        【解决方案4】:

        private 成员只能在同一类的成员内直接访问。 DateTest 是另一个类,因此以下是不可能的

        d1.month = "February ";
                d1.day = 13;
                d1.year = 1991;
        
                d2.month = "July";
                d2.day = 26;
                d2.year = 1990;
        

        使用相应的setter方法替换上面的代码。

        【讨论】:

        • @AbdullahR - 仅仅写它们是不够的。你应该明确地使用它们
        猜你喜欢
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多