文章目录
前面章节讲解了 Java 的一大特性 - 封装,那么 Java 语言能支持封装就得归功于访问权限啦!
在 Java 语言中,访问权限是一种控制类、字段、方法等成员在其他类中的可见性的机制。
1.包
1)定义
因为访问权限涉及到了包,之前并没有说明过,此处先提前说一下
例如:
现在给小朋友起名,好多都是使用热门的字,如“梓”,它带有欣欣向荣,万象更新的吉祥寓意。
大家都很喜欢这样的,然后就会出现了名字重复的问题
比如一喊名字 小梓,结果好几个都答应。。。
这个时候就可以给加一个前缀修饰,比如 “小1班的小梓”, “小2班的小梓” 就可以解决了
Java 中也是如此,我们定义了 两个 Test 类,如何区分呢 ----- 答案是使用包
2)语法
使用 package 关键字 加 包名字(也是文件夹名) 用分号结尾,一般都是在 java 文件的第一行
package 包名;
3)示例代码
// 在文件夹 package1 下有一个 Test.java
package package1;
class Test {
// xxxx
}
// 在文件夹 package2 下有一个 Test.java
package package2;
class Test {
// xxxx
}
4)包的导入
- 使用
import
包名称.类名称 的方式导入
手工导入所需要的类 - 使用
import
包名称.* 的方式导入
由Java 虚拟机
自动加载所需要的类
5)常见的系统包
- java.lang
- java.util
- java.io
- java.lang.reflect
- java.sql
- 其他
2.访问权限的分类
Java 提供了四种访问权限修饰符,分别是public
、protected
、default
(默认,没有关键字修饰)和private
。
1) public 访问权限
public
是最宽松的访问权限,表示成员对所有类都是可见的。在任何地方都可以访问public
修饰的成员。
public class Test {
public int publicVar;
public void publicMethod() {
System.out.println("This is a public method.");
}
}
2) protected 访问权限
protected
表示成员对同一个包内的类和所有子类可见。在其他包中的类无法访问protected
成员。
public class Test {
protected int protectedVar;
protected void protectedMethod() {
System.out.println("This is a protected method.");
}
}
3) default 访问权限
default
是默认的,不需要关键字修饰。它表示成员对同一个包内的类可见,但对其他包中的类不可见。
class Test {
int defaultVar;
void defaultMethod() {
System.out.println("This is a default method.");
}
}
4) private`访问权限
private
是最严格的访问权限,表示成员只对所在类可见,其他类无法访问。
public class Test {
private int privateVar;
private void privateMethod() {
System.out.println("This is a private method.");
}
}
四种访问修饰符的控制权限总结:
范围 | private | default | protected | public |
---|---|---|---|---|
同一类 | ✔ | ✔ | ✔ | ✔ |
同一包中的类 | ✔ | ✔ | ✔ | |
不同包的子类 | ✔ | ✔ | ||
其他包中的类 | ✔ |
3.最佳实践
-
最小化访问权限: 为了提高安全性和封装性,尽可能将成员的访问权限最小化,只提供必要的访问权限。
-
使用
public
接口: 对于需要对外暴露的接口,使用public
修饰符,确保其他类可以访问这些接口。 -
使用
private
保护内部实现: 对于内部实现细节,使用private
修饰符,确保只有本类可以访问。 -
接口: 对于需要对外暴露的接口,使用
public
修饰符,确保其他类可以访问这些接口。 -
使用
private
保护内部实现: 对于内部实现细节,使用private
修饰符,确保只有本类可以访问。
总结:通过合理使用访问权限修饰符,可以使得类的设计更加健壮和可控。