首页 > 编程知识 正文

无法访问protected成员,public protected private

时间:2023-05-03 06:34:58 阅读:145461 作者:3855

访问修饰符详细信息(public,private,protected和friendly ) (默认值) )以Java语言提供了多个范围修饰符,其中最常用的是public,private,protocal

在现实生活中,一个公司不同职务的员工,被分配的任务不同,拥有的权力也不同。 想要执行某项操作,必修必须先获得执行该操作的权限。 一般来说,这也适用于对象。 没有对象许可,也就是说,对象的属性是专用的,并且无法直接访问该对象的专用属性。

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

限制对类成员的访问时面向对象的基础。 这有助于防止滥用对象。 只有通过一系列有定义的方式授予对专用数据的访问权限,才能防止对数据授予不正确的值(通过运行范围检查)。 例如,不能将非类代码直接分配给私有成员。 此外,您还可以精确控制对象中的数据的使用方式和使用时间。

成功实现类成员的方法控件后,类可以创建一个可用的“黑匣子”,该黑匣子不会在不打开内部操作的情况下被篡改。

权限修饰符限制对对象专用属性的访问有三个重要好处。

1 .防止非法访问封装的数据。

2 .有助于保证数据的完整性。

3 .如果必须更改类的私有实现细节,可以限制整个程序中发生的“链式反应”。

访问修饰符是一组限定程序中的其他部分是否可以访问和调用属性或方法的修饰符。 类的访问控制为空或仅public,方法和属性的访问控制为public、private、protected和friendly四个,其中friendly定义了特殊的访问控制权限修饰符的权限如表所示。

访问范围privatefriendly (默认) protectedpublic相同类可访问可访问可访问同一包中其他类不可访问可访问不同包中的子类能力不可访问可访问控制在面向对象的技术中起着重要的作用。 通过正确使用权限控制,可以降低类与类之间的耦合性(相关性),从而降低整个项目的复杂性,也更容易开发和维护整个项目。 在Java语言中,权限修饰符有四种。

1.private由private限定的类成员仅由该类的自己的方法访问和修改,而不被其他类访问和引用,包括疲惫的子类。 因此,私有修饰符具有最高的保护级别。

2 .如果2.friendly (默认)光线不是由权限修饰符限定的,则表示它具有默认的访问控制特性。 在此缺省访问控制权限下,类仅由同一包中的类访问和引用,其他包中的类不使用,即使该类的子类位于其他包中。 这种访问特性也称为分组访问特性。

同样,如果类中的成员没有访问控制符,也表示他们具有软件包可访问性。

3 .受保护的访问控制符受protected限定的类成员可以从三种类型中访问:该类本身、同一包中的其他类以及其他包中该类的子类。 使用protected修饰符的主要目的是允许其他包的子类访问父类的特定属性和方法。

4.public如果某个类声明为public,则其他包中的类可能会访问该类。 如果软件包中的其他类以编程方式通过import语句部署到public类中,则可以访问和引用该类。

类中设置为public的方法是该类的对外接口部分,避免了程序的其他部分直接操作类中的数据,实际上是数据封装的体现。 每个Java程序的主类必须是公共类,这也是基于相同的原因。

以下是在Java中使用访问修饰符的示例。

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

类student {//名称。 权限为默认(friendly )字符串名称; //定义私有变量,id号为private String idNumber; //定义受保护变量,学号protected String no; //定义共享变量和邮箱公共字符串电子邮件; //定义共享方法:学生信息public String info (() { return名称) name )、身份证号码(idNumber )、学校号码(no ) )、邮箱) email; }创建新的StudentTest类文件,在该文件中输入main (定义方法,访问Student类的属性并为其赋值,然后打印用户的信息。 代码如下。

publicclassStudenttest { publicstaticvoidmain (字符串[ ] 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()方法中无法访问该属性。

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。