Java基础语法 四种访问权限修饰符详细通俗的解释

Java语言提供了很多类型的修饰符,主要分为以下两类:

  • 访问修饰符
  • 非访问修饰符

修饰符的作用主要是定义类、方法或者变量,通常会放在代码的最前端。例如下面的代码:

//定义类
public class Test{
    
    //public
    //定义变量
    private int a;//private
    public static final int BOX=40;//public static final
    static final int weeks=7;//default static final
    protected double b = 2.0;//protected
    //定义方法
    public void Method(){
    
    //public
        ...
    }
    public static void main(String[] args){
    
    //public static
        ...
    }
}

通过上面的Test类我们可以看到,使用修饰符可以让成员变量得到不同程度的访问控制。由此可得我们可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限,分别是:

  • public : 意为公开的,访问权限最高,可以跨包访问。

    1. 使用对象:类、接口、变量、方法。
    2. 当public用来修饰类中的成员即变量和方法时,那么被public修饰的成员可以在不同包中、相同包中、子类中都能访问到。当前类可以直接访问,不同包的类则只要通过该类的对象进行访问便可以。就像空气,不管是人还是动物、植物都可以访问。
    3. 在类的继承上,被public修饰的成员能被所有的子类继承下来,就是你以后建的房子,花园,可以被你的子孙都继承下来。
  • protected : 意为受保护的,权限次之,可以在同包和子/父类中访问。

    1. 使用对象:变量、方法。 注意:不能修饰类(外部类)
    2. 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
    3. 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。
    4. protected修饰的变量和方法在同一个package(包)中的时候,则同一个包中的所有
      类都可以访问到,包括该类的子类也可以访问,不管子类是否和父类在同一个包。就是说你
      收藏的祖传宝贝,只要是你的子孙,不管他现在是和你住得近,还是住得比较远,他们都可以
      访问你收藏的祖传宝贝。
    5. 同时呢,被protected修饰的成员是可以被该类的子类继承下去的,和上面那个例子意思
      差不多。

    注意:接口及接口的成员变量和成员方法不能声明为 protected。

  • default(缺省、friendly): 意为默认的,一般不写,权限次之,可以在同包中访问。那么就是在相同的包里面,所有的类都能访问,但是在不同的包中,即使是子类中也不可以访问,也就是说只有在同一个包中的子类才能访问到父类中default修饰的成员。就像你收藏的宝贝,一个子孙孝顺,在你旁边一直照顾你,一个子孙不孝顺,很多年都不回来看望,那就不友好了,对吧,所以即使是你的子孙,也不能访问你收藏的宝贝。

    1. 使用对象:类、接口、变量、方法。
    2. 接口里的变量都隐式声明为 public static final
    3. 而接口里的方法默认情况下访问权限为 public
    4. 在类的继承上呢,被default修饰的成员也只能被该类所在同一个包的子类继承下来,也
      就是说只有孝顺的才可以继承宝贝。
  • private : 意为私有的,权限最低,只能在本类中访问。

    使用对象:变量、方法。 注意:不能修饰类(外部类)

    1. 私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问。
    2. 声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问,通过setter方法访问变量值。
    3. Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。
    4. 在类的继承上呢,子类是继承不了父类被private修饰的变量的,就像你的眼睛、鼻子、耳朵
      是你私有的,你只能自己使用,是不可以继承给你子孙的。

    注意:类和接口不能声明为 private。

在上一篇文章中(Java基础语法 属性与字段的区别)我们介绍到,实体类中的字段和常量描述了类的数据(域),当这些数据的某些部分不允许外界访问时,根据 “对象封装” 的原则,应尽量避免将一个类型的字段以公有方式提供给外部。除了final修饰的常量,一般将其设置为private类型。所以,为了保证安全性,一般把实体类的成员变量访问权限降到最低。

我们可以通过以下表来说明访问权限:

配合下图一起理解,就能轻松记住各个修饰符的访问权限了。

猜你喜欢

转载自blog.csdn.net/liulei952413829/article/details/114641913