Java 访问修饰符与非访问修饰符

举报
海拥 发表于 2022/03/29 17:22:58 2022/03/29
【摘要】 本小节详细介绍了 Java 访问修饰符。它们控制 Java 类及其成员(函数和数据)的可见性。它们是公共的、私有的和受保护的。但是,当没有修饰符存在时,Java 也实现了默认情况。这意味着一个类、它的函数、字段只能被同一模块中的其他类访问。顺便说一下,Java 中主要有四种类型的访问修饰符。让我们在示例的帮助下详细讨论它们中的每一个。@[TOC](Java 访问修饰符) ⏰1.Java 访问...

本小节详细介绍了 Java 访问修饰符。它们控制 Java 类及其成员(函数和数据)的可见性。它们是公共的、私有的和受保护的。

但是,当没有修饰符存在时,Java 也实现了默认情况。这意味着一个类、它的函数、字段只能被同一模块中的其他类访问。

顺便说一下,Java 中主要有四种类型的访问修饰符。让我们在示例的帮助下详细讨论它们中的每一个。
@[TOC](Java 访问修饰符)

⏰1.Java 访问修饰符示例解释

以下是我们今天要讨论的要点。

private:在当前对象中可以使用,修饰变量和方法
default:(默认,什么都不写)在同一个包可以使用,修饰变量、方法
protected:对同一个包内的类和所有子类能使用。修饰:变量、方法
public:对所有类可以使用,修饰类、接口(默认)、变量、方法

- 对外完全可见 对本包和所有子类可见 仅对本包可见 仅对本类可见
访问控制修饰符 Public Protected default Private
同一包中的其它类
同一包中的子类
不同包中的其它类
不同包中的子类

修饰符介绍
Java 提供了多种机制来控制类或变量的对象的可见性。它们在编程术语中被称为修饰符。

它们可能属于以下类别之一:

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

此外,Java 支持四种主要的访问修饰符。而非访问说明符在 Java 中有 7 种类型。您可以使用它们来指定对类、方法、构造函数或变量的访问级别。

Java 中的四个主要访问说明符是:

  • default 默认访问修饰符
  • private 私有访问修饰符
  • public 公共访问修饰符
  • Protected 受保护访问修饰符

根据 Java 继承概念:

  • 超类的公共方法也必须在子类中具有相同的级别。
  • 子类将无法使用私有方法。
  • 超类中的受保护方法在子类中是公共的或受保护的。

📇 2. default 访问修饰符

默认情况下,任何包都可以访问默认访问修饰符。程序员无需指定任何关键字即可使用默认访问修饰符。

这意味着程序员不需要显式指定类、方法或构造函数默认值。

默认情况下,可以从同一包中存在的任何其他“类”访问类或方法。我们通常不使用任何访问修饰符来定义变量和方法。

下面的示例显示了一个默认类:

class Def {
   int num = 175;  
       void print() {
          System.out.println("Default class " + num); 
      }
   }

public class Test {
   public static void main(String args[]) {
      Def def = new Def();
      def.print();
   }
}

如您所料,输出为:

Default class 175

在这里插入图片描述

📆 3. private 访问修饰符

顾名思义,私有访问修饰符只限制对定义的“类”的访问。借助“private”关键字,我们可以实现数据封装的真正概念。这意味着隐藏外部世界的私人成员。

此外,请注意所有用户定义的变量、构造函数或方法也可以具有私有访问权限。检查以下几点:

标记为私有的函数只能在类中访问。
您不能将顶级类或接口声明为私有。此外,如果是这样,那么它将毫无用处,因为没有人可以访问它。
程序员必须定义一个 getter 或 setter 来访问私有方法或变量。
下面的示例将帮助您可视化私有方法的 getter:

class Priv {
    private void PRINT() {
        System.out.println("Private access");
    }

    public void getPrint() {
        PRINT();
    }
}

public class Test {
    public static void main(String args[]) {

        Priv priv = new Priv();
        priv.getPrint();
    }
}

在上面的示例中,getPrint() 是私有函数 PRINT() 的 getter 函数。输出是:

Private access

如下图
在这里插入图片描述

📺 4. public 访问修饰符

public 修饰符在 Java 应用程序中最常见。它们意味着可以在整个包中访问任何公共类、方法、变量、接口或构造函数。

  • 在另一个包中使用公共类之前,必须先导入它。
  • 如果你继承了一个公共类,那么默认情况下子类将拥有它的所有方法和变量。

为了您的信息,Java 中的“main()”方法是公开的。

public class First {
    public void print() {
        System.out.println("Hello");
    }
}
public class Test extends First {
    public static void main(String args[]) {
        First first = new First();
        first.print();
    }
}

输出是

Hello

![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/44fcf08aafe57f8e3f95d3b37431540a.png =300x)![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/b198c3dac9563c8465758c62d8d1f4f8.png =400x)

🎬 5. Protected 访问修饰符

具有受保护访问权限的对象或方法仅对包和子类可见。

以下是详细说明确切行为的几点:

  • 这些方法、变量或构造函数只能在包内访问,也可用于所有子类。
  • protected 关键字不适用于任何类或接口。
  • 接口方法或变量不能具有受保护的访问权限。

看下面的例子:

public class First {
   protected static int count;

   public void update(){
      System.out.println(++count);
   }

   public class Test extends First {

      public static void main(String args[]) {

         First out = new First();
         out.update();
      }
   }
}

输出:

1

![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/5009792720d6cf26bb1c338703edaa1c.png =300x)![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/aad272676711557ebe169ac102ca3c51.png =389x)

🎥 非访问修饰符

在 Java 编程中,您将获得七个非访问修饰符。您可以在它们前面加上类/方法/变量/构造函数并在程序中使用它们。

这里有一些要点可以帮助您了解何时应该使用特定的修饰符。

  • Static - 这意味着某些东西与类直接相关。
  • Final – 表示对象是不可变的。
  • Abstract - 这意味着您需要子类来创建对象。
  • Synchronized - 表示一次只有一个线程可以执行一个方法。
  • Transient – 意味着在序列化过程中排除某些东西。
  • Volatile – 表示不同的线程可以修改变量的值。
  • Native – 它表明该方法在使用 JNI 或 JNA 的本机代码中可用。

🥋 几个关键点

以下是对上述概念的快速总结。它将帮助您更好地使用 Java 中的访问修饰符。

  • 如果您正在编写一个类以供重用,则将最严格的访问级别应用于逻辑上的那些字段。
  • 此外,将私有访问设为您的默认选择,直到出现可靠的相反情况。
  • 此外,永远不要将常量标识符标记为public。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。