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。
- 点赞
- 收藏
- 关注作者
评论(0)