java基础之权限关键字分析
访问权限修饰符
1、四个访问权限修饰符
java中给定了四个权限修饰符,分别是:public、protected、private以及默认(什么都不写)
2、定义变量
用来修饰类中变量的时候访问权限:
权限修饰符名称 | 本类 | 同包 | 其他包 | 任意位置 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √(其他包中的子类) | × |
默认 | √ | √ | × | × |
private | √ | × | × | × |
呈现出来阶梯型差异。
测试
这里直接用代码来进行演示即可:
定义类,注意包名:
package com.guang.test;
public class User {
public int i;
protected int j;
int k;
private int l;
}
测试类一:
package com.guang.test;
public class PrivilegeTest {
public static void main(String[] args) {
User user = new User();
int i = user.i;
int j = user.j;
int k = user.k;
// 根本就找不到,private关键字修饰的,不能够在外部使用
// user.l;
}
}
测试类二:
package com.guang.test1;
import com.guang.test.User;
public class PrivilegeTest {
public static void main(String[] args) {
User user = new User();
int i = user.i;
// 不同包,两个都不能访问
// int j = user.j;
// int k = user.k;
// 根本就找不到
// user.l;
}
}
不同包的情况,可以看到protected和默认修饰符修饰的都不能够访问。
那么现在修改一下原来的类结构,创建子类,在外部包中来进行使用变量j,发现是可以使用的。
public class Person extends User {
public void show(){
int i = this.i;
int j = this.j;
// 直接报错
// this.k
}
}
所以就有了上面的结论
3、定义方法
将方法定义成为public方法时,表示的当前的方法在任意位置都可以被当前对象调用;
将方法定义成private修饰时,表示的是只能够在本类中被使用;
将方法定义成默认修饰符修饰时,表示的是只能够在同包中来进行使用;
将方法定义成protected修饰符修饰时,通常用来表示不同包中的子类需要来对其进行实现;
4、定义类
定义类的时候只能够使用public和默认的,而不要去使用protected和private。
如果使用private来修饰类,那么毫无意义,因为对于外界来说无法使用;使用protected来定义类,表示的是有保护的,也没有任何意义。
所以在定义类的时候,可以看到在大多数类中,都是使用默认或者是public来进行修饰,然后有时候还会加上static关键字来进行修饰
static关键字表示的是在类加载的时候也会跟着一起加载,final表示的不可以在类中被继承。
5、类定义推荐设置
1、所以如果当前类不想被外界使用,只想在本类中来进行使用的话,那么建议将类定义成为内部类,并且访问修饰符建议使用默认修饰符来进行操作。
2、如果当前类可以被外界来进行使用,那么首先将访问修饰符扩大,使用public;如果不想被继承,那么推荐使用final关键字来进行修饰
从理论中来,到实践中去,最终回归理论