JAVA程序设计--对象和类(五)

数据域封装

在上一篇博文中(对象和类(四))中从代码中可以知道,类的数据域radius和numberOfObjects可以直接修改。(静态和实例的改动)非常不好,因为:

①数据可能被篡改

②使得类变得难以维护,同时容易出现错误(不仅这个类需要修改,而且使用这个类的程序也许要修改)

综上,应该使用private修饰符将数据域声明为私有的,称之为数据域封装


get和set方法

此举将私有数据域的类外的对象访问数据域的途径砍断了,但总有程序需要访问,于是才需要提供一个get方法返回数据域的值。为了更新数据域,则需要提供一个set方法来给数据域设置新值。

get被称为:访问器

set被称为:修改器


实例验证:

package test;

public class CircleWithPrivateDataFields {
  /** The radius of the circle */
  private double radius = 1;

  /** The number of the objects created */
  private static int numberOfObjects = 0;

  /** Construct a circle with radius 1 */
  public CircleWithPrivateDataFields() {
    numberOfObjects++;
  }

  /** Construct a circle with a specified radius */
  public CircleWithPrivateDataFields(double newRadius) {
    radius = newRadius;
    numberOfObjects++;
  }

  /** Return radius */
  public double getRadius() {
    return radius;
  }

  /** Set a new radius */
  public void setRadius(double newRadius) {
    radius = (newRadius >= 0) ? newRadius : 0;
  }

  /** Return numberOfObjects */
  public static int getNumberOfObjects() {
    return numberOfObjects;
  }

  /** Return the area of this circle */
  public double getArea() {
    return radius * radius * Math.PI;
  }
}
 package test;

public class TestCircleWithPrivateDataFields {
  /** Main method */
  public static void main(String[] args) {
    // Create a Circle with radius 5.0
    CircleWithPrivateDataFields myCircle = 
      new CircleWithPrivateDataFields(5.0);
    System.out.println("The area of the circle of radius "
      + myCircle.getRadius() + " is " + myCircle.getArea());

    // Increase myCircle's radius by 10%
    myCircle.setRadius(myCircle.getRadius() * 1.1);
    System.out.println("The area of the circle of radius "
      + myCircle.getRadius() + " is " + myCircle.getArea());
  }
}

结果:

The area of the circle of radius 5.0 is 78.53981633974483
The area of the circle of radius 5.5 is 95.03317777109125

从这段程序也可以看得出,在客户端程序中不能使用类似myCircle.radius的语句了,不可以在客户端内部访问私有数据了。

猜你喜欢

转载自blog.csdn.net/qq_35827280/article/details/80315329