访问控制符

来源:互联网 发布:手机网络哪家好 编辑:程序博客网 时间:2024/06/05 02:37

访问控制符

类的访问控制符有四种: 

public  private  protected和默认即变量或方法前不添加访问控制符) 


在一个类的内部 所有成员可以相互访问,访问控制符是透明的;

访问控制符是针对外部访问而言的

在一个类的外部 通过 类对象名.私有成员名  的方式无法访问该对象中的私有成员但可以访问保护成员和公有成员

下面举一个例子

例1:

class asd1 {private int a, b, c;  //2行// 设置三边长度public void setTriangle(int i, int j, int k) {  //5行a = i;b = j;c = k;}      //8行// 求周长public int zhouchang() {return (a + b + c);}// 求面积public double area() {double p = 1.0 * (a + b + c) / 2;return Math.sqrt(p * (p - a) * (p - b) * (p - c));}}public class asd {public static void main(String[] args) {asd1 t = new asd1();//t.a = 3;   //31行//t.b = 4;   //32行//t.c = 5;   //33行t.setTriangle(3, 4, 5);  //34行System.out.printf("三角形的面积是: %f\n", t.area());System.out.printf("三角形的周尝试: %d\n", t.zhouchang());}}

在命令行窗口下输出结果为:


给外部的变量赋值,可以使用想31、32、33行那样,也可以使用像5行到8行和34行那样,但是一般推荐使用后者,因为后者不会直接的改变变量的值,使得程序本身更加安全

在本程序中,因为第2行的三个变量是私有的,所以不可以进行像第31、32、33行那里那样给变量赋值,若要进行这样的赋值,需把2行的变量类型前边的private去掉

在这4个访问控制符中,一般public和private使用比较多,所以主要说这个

再举一个例子

例2;

class A{public int i = 10;private int j = 20;public void f(){i = j = 111;g();}private void g(){j = i = 222;f();}}public class asd{public static void main(String[] args){  A a = new A();a.i = 0;      //24行//a.j = 0;  //25行//a.f();      //26行//a.g();    //27行System.out.println("2014年5月15日09:41:44");}}

输出结果为:

2014年5月15日09:41:44


本程序的结果并没有什么实际意义,下面将会通过这个程序说明一下public和private两个访问控制符的使用

由上面的代码可以知晓,本程序定义了一个public的int型变量,一个private的int型变量,一个public的方法,还有一个private的方法,

首先要说的是,在f()和g()方法内部可以随意使用i和j,因为它们同属于一个类中,而23行是没有错的,因为i是public的26行本身也没有错误,但是如果去掉前面的注释会报错,这是因为f()方法中有g(),而g()方法中也有f(),这就形成了间接递归(关于递归,会在数据结构中说的,这里不多说)

而25行27行会报错,因为j和g()方法都是private的

【所有代码均在windows系统下eclipse环境JDK 1.7运行通过】

(如有错误,敬请指正)

1 0
原创粉丝点击