首页 > 编程语言 >Java的访问控制修饰符

Java的访问控制修饰符

时间:2023-05-25 16:45:58浏览次数:37  
标签:包中 Java 访问控制 修饰符 控制符 访问 public

为什么使用访问控制修饰符

  1. 使用访问控制修饰符,主要是为了实现信息的隐藏,在编写程序时,有些核心数据往往不希望被用户调用,需要控制这些数据的访问。
  2. 对类成员访问的限制,有利于防止对象的误用。只允许通过一系列定义完善的方法来访问私有数据,就可以(通过执行范围检查)防止数据赋予不正当的值。类以外的代码不可能直接向一个私有成员赋值,还可以精确地控制如何以及何时使用对象中的数据。
  3. 当正确实现对类成员的访问控制后,类就可以创建一个可用的“黑箱”,其内部动作不会被打开而任意篡改。

使用访问控制修饰符的好处

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

访问控制符分类

访问控制符是一组限定类、属性或方法是否可以被程序里的其他部分访问和调用的修饰符。

  1. 类的访问控制符只能是default或者public,但是内部类是可以用private修饰的,避免类以外的其他类访问。
  2. 方法和属性的访问控制符有4个,分别是public、private、protected和default,其中default是一种没有定义专门的访问控制符的默认情况。

四种访问控制符权限

访问范围 private default protected public
同一个类 可访问 可访问 可访问 可访问
同一个包中的其他类 不可访问 可访问 可访问 可访问
不同包中的子类 不可访问 不可访问 可访问 可访问
不同包中的非子类 不可访问 不可访问 不可访问 可访问

四种访问控制符详细描述

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

1.private

用 private 修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类(包括该类的子类)访问和引用。因此,private 修饰符具有最高的保护级别。例如,设 PhoneCard 是电话卡类,电话卡都有密码,因此该类有一个密码域,可以把该类的密码域声明为私有成员。

2.default(默认)

如果一个类没有访问控制符,说明它具有默认的访问控制特性。这种默认的访问控制权规定,该类只能被同一个包中的类访问和引用,而不能被其他包中的类使用,即使其他包中有该类的子类。这种访问特性又称为包访问性。
同样,类内的成员如果没有访问控制符,也说明它们具有包访问性。定义在同一个文件夹中的所有类属于一个包,所以前面的程序要把用户自定义的类放在同一个文件夹中,以便不加修饰符也能运行。

3.protected

用保护访问控制符 protected 修饰的类成员可以被三种类所访问:该类自身、与它在同一个包中的其他类以及在其他包中的该类的子类。使用 protected 修饰符的主要作用,是允许其他包中它的子类来访问父类的特定属性和方法,否则可以使用默认访问控制符。

4.public

当一个类被声明为 public 时,它就具有了被其他包中的类访问的可能性,只要包中的其他类在程序中使用 import 语句引入 public 类,就可以访问和引用这个类。
类中被设定为 public 的方法是这个类对外的接口部分,避免了程序的其他部分直接去操作类内的数据,实际就是数据封装思想的体现。每个 Java 程序的主类都必须是 public 类,也是基于相同的原因。

标签:包中,Java,访问控制,修饰符,控制符,访问,public
From: https://www.cnblogs.com/zfstudy/p/17431782.html

相关文章

  • java removeAll 返回2个数组的差集
    注意:removeAll不是差集importjava.util.ArrayList;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){ArrayList<String>objArray=newArrayList<String>();ArrayList<String>objArray2=newArrayList......
  • Netbeans开发—JAVA 作业之求素数
        JAVA课上的一个作业:求比给定的数小的所有素数并打印出来    准备工作:    1)用Netbeans新建一个JavaApplication     2)创建文件目录(根据个人习惯创建文件目录),我的目录如下:        3)创建本工程的JAVA文件:Prime.java              ......
  • javascript prototype and class
    js中的prototype绝对是js的一个重要知识点,有点像delegate的模式,和oop对象形式还是有些差别的,尽管可以做同样的事情。简要学习可以参见:https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes关于js的class和java的语法很像,参见:https://develope......
  • Fdog系列(二):html写完注册页面之后怎么办,用java写后台响应呀。
    文章目录1.前言2.创建javaweb项目3.创建Server4.解决中文乱码问题5.响应后台数据目录Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。所有文章源码已整体打包上传至github,求星星!1.前言接着第一篇用html完成了注册页面,第二篇,我们来完成后台数据处理,需要用......
  • java 定义不固定长度的数组
    在Java中,我们可以使用ArrayList来定义不固定长度的数组,因为ArrayList内部使用了一个动态数组来存储元素。ArrayList<Integer>intList=newArrayList<Integer>();intList.add(1);intList.add(2);intList.add(3);intList.a......
  • java Arrays.fill 扩充数组
    importjava.util.*;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){intarray[]=newint[6];Arrays.fill(array,100);for(inti=0,n=array.length;i<n;i++){System.out.println(array[i])......
  • Java的CompletableFuture,Java的多线程开发
    三、Java8的CompletableFuture,Java的多线程开发1、CompletableFuture的常用方法以后用到再加runAsync():开启异步(创建线程执行任务),无返回值supplyAsync():开启异步(创建线程执行任务),有返回值thenApply():然后应用,适用于有返回值的结果,拿着返回值再去处理。exceptionally......
  • 通过Java代码备份Mysql数据库
    MainpublicclassMain{publicstaticvoidmain(String[]args){//备份数据库BakDb.bakDB();//获取本地备份的sql文件List<String>names=Unitls.sqlFileNameByLocal();//获取最后一个文件名Stringname=names......
  • java 获取数组,最大值,最小值
    以下实例演示了如何通过Collections类的Collections.max()和Collections.min()方法来查找数组中的最大和最小值:importjava.util.Arrays;importjava.util.Collections;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){Integer[]......
  • 如何用GPT开发后端java接口
     需求如图:一个特别小的项目,时间也很紧,就是要做到excel数据上传,然后根据每天上传的数据来生成折线图和统计表,并供大屏展示第一步:把表结构和逻辑描述给第二步得到代码:    第三部:粘贴跑通,一个接口花费约几分钟。。有个问题是这次我为了写博客重新提问得到的接口代......