一.简介
在定义私有数据域的类外的对象是不能访问这个数据域的。但是经常会有客户端需要存取、修改数据域的情况。为了能够访问私有数据域,可以提供一个get方法返回数据域的值。为了能够更新一个数据域,可以提供一个set方法给数据域设置新值。get方法也被称为访问器,而set方法称为修改器。
getRadiusO方法返回半径值setRadius(newRadius)方法给对象设置新的半径,如果新半径为负,就将这个对象的半径设置为0。因为这些方法是读取和修改半径的唯一途径,所以,你完全控制了如何访问radius属性。如果必须改变这些方法的实现,是不需要改变使用它们的客户程序的。这会使类更易于维护。
二.代码
实现类
package com.zhuo.demo;
public class CircleWithPrivateDataFields {
private double radius = 1;
private static int numberOfObjects = 0;
CircleWithPrivateDataFields() {
numberOfObjects++;
}
CircleWithPrivateDataFields(double newRadius) {
radius = newRadius;
numberOfObjects++;
}
public void setRadius(double newRadius) {
radius = newRadius > 0 ? newRadius : 0;
}
public double getRadius() {
return radius;
}
public static int getNumberOfObjects() {
return numberOfObjects;
}
public double getArea() {
return radius * radius * Math.PI;
}
}
测试类
package com.zhuo.demo;
public class TestCirclePrivateDataFields {
public static void main(String[] args) {
CircleWithPrivateDataFields mycircle = new CircleWithPrivateDataFields(5.0);
System.out.println("半径为" + mycircle.getRadius() + "的圆的面积为" + mycircle.getArea());
mycircle.setRadius(mycircle.getRadius() * 1.1);
System.out.println("半径为" + mycircle.getRadius() + "的圆的面积为" + mycircle.getArea());
System.out.println("创建的对象数量为" + CircleWithPrivateDataFields.getNumberOfObjects());
}
}
三.运行结果
半径为5.0的圆的面积为78.53981633974483
半径为5.5的圆的面积为95.03317777109125
创建的对象数量为1
Process finished with exit code 0