龙空技术网

Java基础:四种访问权限修饰符详解!

云端源想IT培训 47

前言:

此刻朋友们对“java的接口修饰符”都比较关怀,咱们都想要分析一些“java的接口修饰符”的相关内容。那么小编在网络上汇集了一些对于“java的接口修饰符””的相关知识,希望兄弟们能喜欢,兄弟们快快来学习一下吧!

“这里是云端源想IT,帮你轻松学IT”

嗨~ 今天的你过得还好吗?

当你穿过暴风雨

你就不再是原来那个人了

- 2023.09.01 -

Java中的访问权限修饰符主要是用来控制类、接口、方法和变量等成员的可见性和访问范围。Java中有四种不同的访问权限修饰符,分别是public、protected、default和private。下面将对这四种访问权限修饰符进行详细介绍,以便更好地理解它们各自的作用和用法。

一、什么是访问权限修饰符

访问权限修饰符是Java语言中的一种机制,用于限制对类、变量、方法和构造器的访问权限。通过使用访问权限修饰符,我们可以控制哪些代码可以访问和操作这些元素,从而保护代码的机密性和完整性。

在现实生活中,一个公司不同职位的职工,被分配的任务不同,所拥有的权力也不同。想要执行某一操作,必修要先得到执行该操作的权力。一般而言,这对对象也同样适用:没有对象的许可(即对象的属性是私有的),不能直接访问该对象的私有属性。

封装(信息隐藏)是面向对象重要的特性之一,这也是访问权限修饰符存在的目的(实现信息的隐藏)。在编写程序时,有些核心数据往往不希望被用户调用,需要控制这些数据的访问。

对类成员访问的限制时面向对象的一个基础,这有利于防止对象被误用。只允许通过一系列定义完善的方法来访问私有数据,就可以(通过执行范围检查)防止数据赋予不正当的值。例如,类以外的代码不可能直接向一个私有成员赋值。同时,还可以精确地控制如何以及何时使用对象中的数据。

当正确实现对类成员的方法控制后,类就可以创建一个可用的“黑箱”,其内部的动作不会被打开而任意的篡改。

通过访问权限修饰符来限制对对象私有属性的访问,有3个重要好处。

防止对封装数据的未授权访问。有助于保证数据的完整性。当类的私有实现细节必须改变时,可以限制发生在整个程序中的“连锁反应”。

二、Java中的访问权限修饰符

Java语言有四个权限访问修饰符,权限从大到小依次为:

1)public :公共权限,可以被任意类访问,不同包不同类依然可以访问,

可修饰:类、成员变量、方法,内部类

2)protected:受保护的权限,可以被同包类访问,如果不是同包类,必须是该类的子类才可以访问

可修饰:成员变量、方法、内部类

3)default:默认的(无),同包权限,只能被同包的类访问

可修饰:类、成员变量、方法,内部类

4)private:私有权限,只能在本类中访问,同包其他类也不能访问

可修饰:成员变量、方法、内部类

补充说明:在Java中,default和friendly是同一个访问级别的两种不同称呼。

当一个成员没有被声明为private、protected或public时,它就具有默认访问级别,也被称为friendly访问级别。默认访问级别仅适用于同一个包中的类。这意味着,只有在同一个包内的其他类可以访问默认访问级别的成员,而在其他包中的类无法访问。

总结来说,default和friendly修饰符没有区别,它们都表示同一个访问级别,仅适用于同一个包中的类。

访问权限修饰符的权限:

访问权限控制在面向对象技术中处于很重要的地位,合理地使用访问权限控制符,可以通过降低类和类之间的耦合性(关联性)来降低整个项目的复杂程度,也便于整个项目的开发和维护。

1、public

public是Java中最常用的访问权限修饰符,它表示公共的意思,被public修饰的类、接口、方法和变量等成员都可以被任何其他类或对象所访问。

具体来说,如果一个类被声明为public,则这个类可以被从任何地方访问,无论是在同一个包内还是在不同的包内。同样地,如果一个方法、变量或者接口被声明为public,则它们也可以被其他类或对象从任何地方访问。

例如:

public int myVar;public void myMethod() {// ...}

2、protected

protected是一种比较特殊的访问权限修饰符,它表示受保护的意思。被protected修饰的类、方法、变量或者接口只能被相同包或其子类中的类或对象所访问。

也就是说,protected成员只能在定义它的类的子类中被访问,而不能在同一个包中的其他类或对象中被访问。需要注意的是,即使在子类中访问protected成员时不需要使用类名来限定,但在同一个包中的其他类或对象中访问时,仍需要使用类名来限定。

例如:

protected int myVar;protected void myMethod() {// ...}

3、default

default是Java中的默认访问权限修饰符,它表示不指定任何访问权限修饰符时所使用的访问权限。如果一个类、方法、变量或接口没有使用任何访问权限修饰符,则这些成员默认为包级别访问权限,也就是说,只能在同一个包内被访问。

default修饰符的作用范围介于public和protected之间,它既不像public那样对所有代码都公开可见,也不像protected那样只在子类和相同包内可见。

例如:

int myVar;void myMethod() {// ...}

4、private

private是一种最严格的访问权限修饰符,它表示私有的意思,只有在定义该成员的类内部才能被访问。被private修饰的类、方法、变量或接口只能在自己的类中被调用,无法被同一个包内或者其他包中的其他类或对象所访问。

需要注意的是,在一个类中,如果某个成员没有使用任何访问权限修饰符,则默认为private访问权限。

例如:

private int myVar;private void myMethod() {// ...}

注意:对于类的访问级别,只有public和default(没有标识符)是有效的。默认访问级别仅适用于包内的类,而public可以用于任何地方。而private和protected访问修饰符不能用于类的访问控制。

三、Java中访问权限修饰符的使用

下面创建一个示例,来演示Java中访问权限修饰符的使用。

新建Student类,在该文件中定义不同修饰符的属性和方法,代码如下:

class Student {// 姓名,其访问权限为默认(friendly)String name;// 定义私有变量,身份证号码private String idNumber;// 定义受保护变量,学号protected String no;// 定义共有变量,邮箱public String email;// 定义共有方法,显示学生信息public String info() {return"姓名:"+name+",身份证号码:"+idNumber+",学号:"+no+",邮箱:"+email;}}

新建StudentTest类文件,在该文件中定义main()方法,访问Student类中的属性并赋值,打印出用户的信息。代码如下:

public class StudentTest {public static void main(String[] args) {// 创建Student类对象Student stu = new Student();// 向Student类对象中的属性赋值stu.name = "zhht";// stu.idNumber="043765290763137806";// 这是不允许的。提示stu.idNumber是不可见的,必须注释掉才可运行stu.no = "20lil01637";stu.email = "zhht@qq.com";System.out.println(stu.info());}}

在StudentTest类中,“ stu.idNumber="043765290763137806 ”;代码将提示“The field User.password is not visible”错误信息。将该代码注释掉再运行StudentTest,输出的内容如下:

姓名:zhht,身份证号码:null,学号:20lil01637,邮箱:zhht@qq.com

在源文件中创建了两个类,分别为主类StudentTest和辅助类Student,二者在同一个包中。

在辅助类Student中,创建了4个属性,其访问控制分别问磨人的,私有的,受保护的和共有的,除了私有控制符修饰的彼岸连两个之外,其他的都可以被主类访问,同时创建了一个共有的方法—info(),用于打印学生信息。

在主类StudentTest中,创建类Student的实例化对象stu,通过对象stu来访问stu来访问该对象中的属性并赋值,因为idNumber属性的修饰符为private(私有的),因此,在StudentTest类中的main()方法中无法访问该属性。

从上面的例子中可以看出,权限控制修饰符成功地限制了访问者访问不同类型的属性(成员变量),从而实现了数据的隐藏。

总之,访问权限修饰符是Java语言中一个重要的安全机制,它能够有效地控制对类、变量、方法和构造器的访问权限,从而保护代码的安全性和完整性。在实际编程中,根据需要选择适当的访问权限修饰符,可以让我们编写更加安全和健壮的代码,提升程序的可靠性和稳定性。

我们下期再见!

END

文案编辑|云端学长

文案配图|云端学长

内容由:云端源想分享

标签: #java的接口修饰符 #java 数据权限设计 #java中或者怎么表示 #java类的默认访问级别是什么 #java类的默认访问级别是什么意思啊