Java-面向对象-特性-封装与隐藏

88 阅读1分钟

四种权限修饰符的理解与测试

Java 权限修饰符public、protected、default(缺省)、private 置于类的成员定义前,用来限定对象对该类成员的访问权限。

注意:对于class

对于 class 的权限修饰只可以用 public 和 default(缺省)。

public 类可以在任意地方被访问。 default 类只可以被同一个包内部的类访问。

应用举例

四种权限修饰,在包的内部都是可以访问到的

package com.tadx2.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; 
    }
}

私有的权限在出了Order类以后,就不能访问到了

package com.tadx2.java1;
public class OrderTest {
    public static void main(String[] args) {
		
        Order order = new Order();
	
        order.orderDefault = 1;
        order.orderProtected = 2;
        order.orderPublic = 3;
        
        order.methodDefault();
        order.methodProtected();
        order.methodPublic();
        
        //出了 Order 类之后,私有的结构就不可调用了
        //order.orderPrivate = 4;
        //order.methodPrivate();
    }
}

不同的包下,Default和Private的权限是访问不到的。

package com.tadx2.java2;
import com.tadx2.java.Order;

public class SubOrder extends Order{
    public void method(){
        orderProtected = 1;
        orderPublic = 1;

        //在别的包下,Default和Private的权限是访问不到的。
        //orderDefult = 1;
        //orderPrivate = 1;
    
        //methodDefault();
        //methodPrivate();
    }
}

出了不同的包的子类,Protected是访问不到的。 不同包下的普通类(非子类)要使用Order类,不可以调用声明为private/ default/protecetd权限的属性和方法

package com.tadx2.java2;
public class SubOrderTest {
    public static void main(String[] args) {
        SubOrder subOrder = new SubOrder();=
        subOrder.orderPublic =1;
        //出了不同包的子类,orderProtected是访问不到的
        //subOrder.orderProtected = 1;
    }
}