概述
在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,
- public:公共的。
- protected:受保护的
- default:默认的
- private:私有的
可见,public具有最大权限。private则是最小权限。
编写代码时,如果没有特殊的考虑,建议这样使用权限:
- 成员变量使用
private
,隐藏细节。 - 构造方法使用
public
,方便创建对象。 - 成员方法使用
public
,方便调用方法。
public | protected | default(空的) | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中(子类与无关类) | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |
package com.shiyitiancheng.demo1;
/*
四大权限修饰符
public:公共的
protected:受保护的
不写:默认的
private:私有的
编写代码时,如果没有特殊的考虑,建议这样使用权限:
- 成员变量使用private ,隐藏细节。
- 构造方法使用public ,方便创建对象。
- 成员方法使用public ,方便调用方法。
*/
public class Person {
//定义public修饰符修饰的变量
public int a =10;
//定义protected修饰符修饰的变量
protected int b = 20;
//定义默认修饰符修饰的变量
int c = 30;
//定义private修饰符修饰的变量
private int d = 40;
//定义一个方法
public void show(){
//同一个类中4种权限修饰符修饰的变量和方法都可以使用
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
package com.shiyitiancheng.demo01;
/*
Demo01Person和Person同一个包中的类
*/
public class Demo01Person {
public static void main(String[] args) {
//创建Person对象
Person p = new Person();
p.show();
//同一个包中的无关(不同)类
System.out.println(p.a);//可以使用public修饰的变量
System.out.println(p.b);//可以使用protected修饰的变量
System.out.println(p.c);//可以使用默认权限修饰的变量
//'d' has private access in 'com.shiyitiancheng.demo01.Person'
//System.out.println(p.d);//不能使用private修饰的变量
}
}
package com.itheima.demo02;
import com.itheima.demo01.Person;
//Student是Person不同包的子类
public class Student extends Person{
public void method(){
System.out.println(a);//可以使用public修饰的变量
System.out.println(b);//可以使用protected修饰的变量
//'c' is not public in 'com.shiyitiancheng.demo01.Person'. Cannot be accessed from outside package
//System.out.println(c);//不能使用默认权限修饰的变量
//'d' has private access in 'com.shiyitiancheng.demo01.Person'
//System.out.println(d);//不能使用private修饰的变量
}
}
package com.shiyitiancheng.demo02;
/*
Demo01Student和Person类:不同包的,无关的类
*/
public class Demo01Student {
public static void main(String[] args) {
Student s = new Student();
s.method();
System.out.println(s.a);//可以使用public修饰的变量
//System.out.println(s.b);//'b' has protected access in 'com.shiyitiancheng.demo01.Person'
//System.out.println(s.c);//'c' is not public in 'com.shiyitiancheng.demo01.Person'. Cannot be accessed from outside package
//System.out.println(s.d);//'d' has private access in 'com.shiyitiancheng.demo01.Person'
}
}