Java中的访问控制符

作者: CodingDGSun | 来源:发表于2021-07-02 09:14 被阅读0次

Java提供了4种访问控制级别

  • private
  • 不加任何访问控制符的访问控制级别(default)
  • protected
  • public

从上到下,访问控制级别由小到大。

权限介绍

  • private:当前类访问权限。如果类中的成员(包括属性、方法和构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。
  • default:包访问权限。如果类中的成员(包括属性、方法和构造器等)或者一个外部类,不用任何访问控制符修饰,我们就称它是包访问权限。default访问控制的成员或外部类可以被相同包下的其他类访问。
  • protected:子类访问权限。如果类中的成员(包括属性、方法和构造器等)使用protected访问控制符来修饰,则这个成员即可以被同一个包中的其他类访问,也可以被不同包中的子类访问。
  • public:公共访问权限。这是一个最宽松的访问控制级别。如果类中的成员(包括属性、方法和构造器等)或者一个外部类,使用public访问控制符来修饰,那么这个成员或者外部类就可以被所有类访问,不管访问类和被访问类是否处于同一个包中,不管是否具有父子继承关系。

外部类只能有两种访问控制级别:public和默认default。外部类不能使用private和protected修饰。因为外部类没有处于任何类的内部,也就没有所在类的内部、所在类的子类两个范围。因此,private和protected访问控制符对外部类没有意义。

访问级别控制表

private default protected public
同一个类中
同一个包中
子类中
全局范围内

上面表格横向(每行)比较

比如:有3个类,C1,C2,C3。

  • 其中C1和C2在同一个包下

  • C3和C2不在一个包下,且C3继承了C2,即,C3是C2的不同包下的子类。

  • 在同一个类中,C2访问本类中的属性、方法和默认类。都可访问

      //C2类
      package com.study.demo1;
      public class C2 {
          private int a;
          int b;
          protected int c;
          public int d;
    
          private void test1(){
    
          }
    
          void test2(){
    
          }
    
          protected void test3(){
    
          }
    
          public void test4(){
    
          }
    
          public static void main(String[] args) {
              C2 c2 = new C2();
              c2.a = 1;
              c2.b = 2;
              c2.c = 3;
              c2.d = 4;
    
              c2.test1();
              c2.test2();
              c2.test3();
              c2.test4();
    
              T t = new T();
          }
      }
      //没有任何访问控制符修饰的类
      class T{
    
      }
    
  • 在同一个包中,C1访问C2中的属性、方法和默认类。除了private访问控制符修饰的属性或方法,其他访问控制符修饰的,都可访问。

     //C1类
      package com.study.demo1;
      public class C1 {
          public static void main(String[] args) {
              //类C1与类C2在同一个包内
              C2 c2 = new C2();
            //c2.a = 1;//编译报错
              c2.b = 2;
              c2.c = 3;
              c2.d = 4;
    
            //c2.test1();//编译报错
              c2.test2();
              c2.test3();
              c2.test4();
    
              T t = new T();
          }
      }
    
  • 子类中,C3和C2不在一个包下,且C3继承了C2,即,C3是C2的不同包下的子类。子类中,只能访问父类中的protected和public访问控制符修饰的属性和方法。

      package com.study.demo2;
    
      import com.study.demo1.C2;
    
      public class C3 extends C2 {
          public static void main(String[] args) {
              //类C3继承类C2
              //即类C3是类C2的子类
              C3 c3 = new C3();
            //c3.a = 1;//编译报错
            //c3.b = 2;//编译报错
              c3.c = 3;
              c3.d = 4;
    
            //c3.test1();//编译报错
            //c3.test2();//编译报错
              c3.test3();
              c3.test4();
    
            //T t = new T();//编译报错
          }
      }
    
  • 全局范围类,public访问控制符修饰的属性、方法可以被全局访问。

相关文章

  • 专业课笔记

    一、简要叙述什么是访问控制符,列出java中的访问控制符,并说明各个控制符的控制权限。 访问控制符是一组限定类、域...

  • Java--封装的实现

    封装的实现-使用访问控制符 Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。Java中4种...

  • Java访问控制符

    Java访问控制符的访问权限

  • Java基础-访问修饰符

    Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 de...

  • java访问修饰符

    Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 de...

  • Java中的访问控制符

    Java提供了4种访问控制级别 private 不加任何访问控制符的访问控制级别(default) protect...

  • java中修饰符的用法

    java中可以使用访问控制符来保护对类、变量、方法和构造方法的访问。其类别可分为访问控制修饰符和非访问修饰符 访问...

  • (Java基础)Java中的访问控制符

    概述 Java 中访问修饰符分为4类,分别为 private 、public、protected、default ...

  • Java访问控制符

    类成员访问控制符# private:类成员只能在当前类的内部被访问,用于实现类的封装,将需要隐藏的成员变量和方法用...

  • java访问控制符

网友评论

    本文标题:Java中的访问控制符

    本文链接:https://www.haomeiwen.com/subject/rwllultx.html