访问控制修饰符

成员变量和方法的可见性是使用访问控制修饰符来控制的。访问控制修饰符有四种：private，protected，public和默认。它们的使用权限如下：

表 使用权限

| 同一个类中是否可访问 | 同一个包中是否可访问 | 子类中是否可访问 | 全局可访问
public | 是 | 是 | 是 | 是
protected | 是 | 是 | 是 | 否
默认 | 是 | 是 | 否 | 否
private | 是 | 否 | 否 | 否

下面来讨论在变量声明和类声明前面的修饰符public和private。Java中提供了以上三个访问制修饰符，当它们用来修饰变量和方法时，变量和方法的使用范围受到一定的限制：

public：不限制访问者；

private：只有本类或从本类继承的子类可以访问；

protected；只有本类可以访问。

public可以修饰类的定义，如果使用public修饰，那么可以在其它包内访问这个类，如果不用public来修饰，那么只有在本包内可以使用。

面向对象的一大特点就是数据封装，而访问控制修饰符就是实现数据封装的途径。例如把一个变量定义为protected后，其它的类就不能对这个变量进行直接操作，这就减少了很多出错的机会。在类中可以为变量提供一个访问界面，这样其它的类就可以访问这些变量，也就实现了数据的封装。

下面的例子中，变量被定义为public，所以还应该再定义一个访问两个变量的界面，如下所示：

1. public class point

2. {

3. private int x;

4. private int y;

5. public int getX()

6. {

7. return x;

8. }

9. public int getY()

10. {

11. return y;

12. }

13. }

这样，外界就可以通过方法getX()和setX()来得到这两个私有变量的值。同时还应该定义两个方法用来设置两个变量：

1. public setX(int_x)

2. {

3. x＝_x；

4. }

5. public setY(int_y)

6. {

7. y＝_y；

8. }

这样就实现了对数据x和y的封装。

## 类的静态成员和final 关键字

除了public、private、protected之外，类成员还可以修饰为“静态”(static)和“最终”(final)。

如果某个变量或方法被static修饰，则表明该变量或方法对于该类的所有对象实例来说是公用的。

例如-个同心圆类circle：

public class circle

{

static int x=10;

static int y=20;

}

这样，类circle的每个对象实例都有了相同的圆心坐标。

circle circle1;

circle circle2;

circle1.x=15;

circle2.x=35;

system.out.println(circle1.x);

根据结果可以看到输出的是35而不是15。

final修饰符意思为“最终”。它既可以修饰成员变量、方法，也可以用来修饰类。被修饰为final的类为最终类，表示这个类不能再被继承。