私有字段,点表示法,getter setter方法

时间:2017-03-10 01:34:49

标签: java

很抱歉询问一些关于java的基本概念。

我对如何访问类中的私有字段感到困惑。

例如,我已经定义了一个类:

private class Example{
private  Timestamp fromdate;
private  Timestamp todate;
private  float amount;
public example(Timestamp fromdate, Timestamp todate, float amount){
  this.fromdate= fromdate;
  this.todate= todate;
  this.amount = amount;
}}

请问我是否使用构造函数创建一个新的示例类,即

example ex = new example (fromdate, todate, amount)

我可以通过

访问为ex变量声明的私有字段
  

ex.fromdate,ex.todate,ex.ount?

我们何时以及为什么需要声明一个getter和setter方法来获取对象内部的变量,而我们可以直接使用点符号来获取类中的字段?

非常感谢

--------------------------- EDIT ------------------- -------------------

还有一个问题,

如果我将上面的类嵌套在另一个类中,我是否可以直接使用点符号来获取私有字段?

例如:

public class ExampleOutterClass{
   private class Example(...){...}
   ---Some Operation to get fromdate, todate, amount)---
   Example ex = new Example (fromdate, todate, amount);
   public Timestamp fromdate = ex.fromdate;
   public Timestamp todate = ex.todate;
   public float amount = ex.amount;
}

我正在我的Jbuilder(非常古老的开发人员工具ORZ)中尝试上述实践,并且发现我可以直接使用点符号来引用私有字段这很奇怪,所以我提出了这个问题。 / p>

BTW真的感谢你的帮助

5 个答案:

答案 0 :(得分:0)

因为私人字段无法从课外访问。您无法通过以下方式访问:

  

ex.fromdate,ex.todate,ex.amount

从技术上讲,您可以将它们公开并使用点符号来方便地获得您想要的内容。我们为什么要使用" getter"和" setter" ?您可能认为它们是大多数程序接受的两种常用方法,它们可以限制您定期访问该类成员。而最重要的是,在一些设计模式中很有用。您可以在Javabean中了解有关setter和getter的更多信息。https://en.wikipedia.org/wiki/JavaBeans

答案 1 :(得分:0)

您不能访问类的任何私有成员(字段,方法)。

如果您需要控制对类的私有成员的访问,那么您必须将它们声明为private,并提供操作类实例的方法。

控制"的一种方式访问私有成员是为了定义setter和getter。但在这种情况下,您仍然允许每个人更改对象的内部状态。例如:

public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void setX(double x) {
    this.x = x;
  }
  public double getX() {
    return x;
  }
  // ... setter and getter for y
}

另一种方法是定义可供其他人使用的良好公共API。在这种情况下,只有您的类可以更改其内部状态。例如:

public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void move(double deltaX, double deltaY) {
    // some validations can be applied here
    x += deltaX;
    y += deltaY
  }
}

答案 2 :(得分:-1)

您不能从课堂外访问私人字段, 为了做到这一点,你需要为此声明getter和setter。

答案 3 :(得分:-1)

不,您无法直接从类外的对象访问类的私有成员。私有成员只能由同一类中的函数访问。 Getters和Setter被创建为获取或设置这些值的公共方法。其他类应该使用这些getter和setter来修改私有成员。

您可能遇到的一个问题是:为什么我们需要getter和setter才能让变量公开,然后从另一个类访问它?请关注此问题:Why use getters and setters?

答案 4 :(得分:-1)

私有字段在定义它们的类之外是不可访问的。为了访问这些字段,您可以创建getter或setter方法。当您希望将私有成员设置为只读或者您希望设置成员的值但不读取时,通常会使用Getter和setter方法。

当您想要在返回或设置值之前修改值时,通常也会使用Setter和getter方法。 Ravi为什么要使用getter和setter方法而不是简单地将成员变量公之于众,这是一个很好的答案。