Java权限修饰符


  

引言:

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(); // 会报错
    }
}

文章作者: YangChongZhi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 YangChongZhi !
评论
 上一篇
Java中this和super关键字的使用 Java中this和super关键字的使用
   引言: Java中this和super关键字的使用。this可用来调用本类中的属性、方法、构造器;super可以用来调用父类中的属性方法构造器。 一、this关键字的使用 this可以用来修饰、调用:属性、方法、构造器 this修
2020-12-30
下一篇 
Java方法的重载与重写 Java方法的重载与重写
   引言: Java中方法的重载(Overload)与方法的重写(Override、Overwrite)的相关区别。 一、方法的重载(overload) loading… 定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个
2020-12-30
  目录