4个
-
private 私有
-
public 公开
-
protected 受保护
-
默认(什么都不写) eg.
public class User{
// 私有的
private int id;
// 受保护的
protected int age;
// 公开的
public int weight;
// 默认的
String name;
}
2.以上的4个访问控制权限:控制的范围是什么?
-
private 表示私有的,只能在本类中访问
-
public 表示公开的,在任何位置都可以访问
-
“默认”表示只能在本类,以及同包下访问。
-
protected表示只能在本类、同包、子类中访问。
访问控制修饰符 | 本类 | 同包 | 子类 | 任意位置 |
---|---|---|---|---|
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不行 |
默认 | 可以 | 可以 | 不行 | 不行 |
private | 可以 | 不行 | 不行 | 不行 |
范围从大到小排序:public > protected > 默认 > private
3.访问控制权限修饰符可以修饰什么?
-
属性(4个都能用)
-
方法(4个都能用)
-
类(
public
和默认
能用,其它不行。) -
接口(
public
和默认
能用,其它不行。)
注:接口和类只有public和默认可以用!
eg.
//错误: 此处不允许使用修饰符private
/*
private class MyClass1{
}
*/
//错误: 此处不允许使用修饰符protected
/*
protected class MyClass1{
}
*/
package com.baidu;
public class User{
// 私有的
private int id;
// 受保护的
protected int age;
// 公开的
public int weight;
// 默认的
String name;
// 方法
public void m1(){}
private void m2(){}
void m3(){}
protected void m4(){}
// 静态方法也可以。
public static void x(){}
private static void y(){}
static void z(){}
protected static void k(){}
}
class MyClass1{
}
同包:
package com.baidu;
public class Test01{
public static void main(String[] args){
User user = new User();
// private修饰的元素只能在本类中用。
//System.out.println(user.id);//报错
System.out.println(user.age);
System.out.println(user.weight);
System.out.println(user.name);
}
不同包:
package com.baidu2; // 包变化了。
import com.baidu.User;
public class Test02{
public static void main(String[] args){
User user = new User();
// 错误:protected在这里不行。
//System.out.println(user.age);
// 可以:公开的,在哪都行。
System.out.println(user.weight);
// 错误:“默认”在这里也不行。
//System.out.println(user.name);
}
}
不同包且继承:
package com.baidu3; // 包变化了。
import com.baidu.User;
// User在com.baidu包下。
// Vip在com.baidu3包下。
// User和Vip不在同一个包下。
// 但是Vip是User的子类。
public class Vip extends User{
//实例方法
public void shopping(){
// this表示当前对象
// protected可以
System.out.println(this.age);
// 错误:默认 不行。
//System.out.println(this.name);//报错
}
}