引言:
Java中的权限修饰符(private、缺省、protected、public)
Java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类成员的访问权限。
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
---|---|---|---|---|
private | Yes | |||
(缺省) | Yes | Yes | ||
Protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
- 对于class的权限修饰符只可以用public和default(缺省)。注:构造器的权限大小默认跟类的权限大小保持一致。
- public类可以在任意地方被访问。
- default类只可以被同一个包内部的类访问。
包 com.yczlab.java1
package com.yczlab.java1
public class Order{
private int orderPrivate;
int orderDefault;
protected int orderProtected;
public int orderpublic;
private void methodPrivate(){
//方法体,任何权限的属性在类的内部都是能直接使用的
orderPrivate = 1;
orderDefault = 2;
orderProtected = 3;
orderPublic = 4;
}
void methodDefault(){
//方法体,任何权限的属性在类的内部都是能直接使用的
orderPrivate = 1;
orderDefault = 2;
orderProtected = 3;
orderPublic = 4;
}
protected void methodProtected(){
//方法体,任何权限的属性在类的内部都是能直接使用的
orderPrivate = 1;
orderDefault = 2;
orderProtected = 3;
orderPublic = 4;
}
public void methodPublic(){
//方法体,任何权限的属性在类的内部都是能直接使用的
orderPrivate = 1;
orderDefault = 2;
orderProtected = 3;
orderPublic = 4;
}
}
同一个包(com.yczlab.java1)下,使用不同权限修饰符修饰的属性和方法
package com.yczlab.java1
public class OrderTest{
public static void main(String[] args){
Order order = new Order();
order.orderDefault = 2;
order.orderProtected = 3;
order.orderPublic = 4;
order.methodDefault();
order.methodProtected();
order.methodPublic();
//同一个包中的其他类,不可调用Order类中私有的属性和方法
// order.orderPrivate = 1; // 会报错
// order.methodPrivate(); // 会报错
}
}
不同包(com.yczlab.java2)下,在子类中或非子类中使用不同权限修饰符修饰的属性和方法
package com.yczlab.java2
import com.yczlab.java1.Order
public class SubOrder extends Order{
public static void main(String[] args){
Order order = new Order()
order.orderPublic = 4;
order.methodPublic();
//在不同包的非子类中不能使用以下权限的属性或方法
// order.orderPrivate = 1; // 会报错
// order.orderDefault = 2; // 会报错
// order.orderProtected = 3; // 会报错
// order.methodPrivate(); // 会报错
// order.methodDefault(); // 会报错
// order.methodProtected(); // 会报错
}
public void method(){
orderProtected = 3; //protected修饰的属性在不同包的子类中是可见的
orderPublic = 4;
methodProtected();//protected修饰的方法在不同包的子类中也是可见的
methodPublic();
//父类中被private 或 (缺省) 修饰的属性和方法在不同包的子类中不可见
// orderDefault = 1; // 会报错
// orderPrivate = 2; // 会报错
// methodDefault(); // 会报错
// methodPrivate(); // 会报错
}
}
不同包(com.yczlab.java3)下,普通类中使用不同权限修饰符修饰的属性和方法
package com.yczlab.java3
import com.yczlab.java1.Order
public class TestOrder {
public static void main(String[] args){
Order order = new Order()
order.orderPublic = 4;
order.methodPublic();
//在不同包的普通类(非子类)中不能使用以下权限的属性或方法
// order.orderPrivate = 1; // 会报错
// order.orderDefault = 2; // 会报错
// order.orderProtected = 3; // 会报错
// order.methodPrivate(); // 会报错
// order.methodDefault(); // 会报错
// order.methodProtected(); // 会报错
}
public void method(Order order){
order.orderPublic = 4;
order.methodPublic();
//在不同包的普通类(非子类)中不能使用以下权限的属性或方法
// order.orderPrivate = 1; // 会报错
// order.orderDefault = 2; // 会报错
// order.orderProtected = 3; // 会报错
// order.methodPrivate(); // 会报错
// order.methodDefault(); // 会报错
// order.methodProtected(); // 会报错
}
}