java权限修饰符

Java 的访问修饰符(Access Modifiers)是控制类、方法、变量等成员访问范围的关键工具。它们定义了类、方法或成员变量的可见性,以及在不同位置(如不同包或子类)是否能访问这些成员。Java 提供了四种主要的访问修饰符:public、protected、默认和 private。

  • public:公共的,所有地方都可以访问。

  • protected:本类 ,本包,其他包中的子类都可以访问。

  • 默认(没有修饰符):本类 ,本包可以访问。

    注意:默认是空着不写,不是default

  • private:私有的,当前类可以访问。
    public > protected > 默认 > private

publicprotected默认private
同一类中
同一包中的类
不同包的子类
不同包中的无关类

1. public

  • 定义: public 是最高权限的访问修饰符。
  • 访问范围: 任何地方都可以访问被 public 修饰的类、方法或字段,包括同一包内、其他包中的类,甚至是子类。
  • 使用场景: 当你希望某个成员可以被任何其他类访问时,使用 public 修饰符。
public class Person {public String name;  // public字段,任何地方都可以访问public void greet() {  // public方法,任何地方都可以调用System.out.println("Hello, my name is " + name);}
}

这里,Person 类的 name 字段和 greet 方法都是 public,可以被任何其他类访问和调用。

2. protected

  • 定义: protected 修饰符限制了访问范围,使得只有同一个包中的类和所有子类(无论它们是否在同一个包中)可以访问被 protected 修饰的成员。

访问范围:

  • 同一包内的类;
  • 继承该类的子类(无论是否在同一包内)。

使用场景:
当你希望限制对成员的访问,仅允许同一包内的类或子类访问时,使用 protected 修饰符。

public class Animal {protected String name;protected void makeSound() {  // protected方法System.out.println("Animal sound");}
}public class Dog extends Animal {public void bark() {makeSound();  // 可以调用protected方法System.out.println("Woof! My name is " + name);  // 可以访问protected字段}
}

在这个例子中,name 字段和 makeSound() 方法都被 protected 修饰,因此它们可以被 Dog 类访问,因为 Dog 是 Animal 的子类,即使它们不在同一个包中。

3. 默认(没有修饰符)

  • 定义: 当没有显式指定访问修饰符时,Java 默认采用包级访问权限。也就是说,只有同一包中的其他类可以访问该类、字段、方法。

访问范围:

  • 同一包内的类可以访问;
  • 不允许外部包的类访问。

使用场景:
当你希望某个成员仅限于同一个包内的类访问时,使用默认访问权限。

class Car {  // 默认访问权限类String model;  // 默认访问权限字段void startEngine() {  // 默认访问权限方法System.out.println("Engine started");}
}

4. private

  • 定义: private 修饰符提供了最严格的访问控制,它仅允许该类的内部方法访问被 private 修饰的成员。

访问范围:

  • 仅限于类内部访问;
  • 其他类无法直接访问。

使用场景:
当你希望完全封装某些数据,不希望外部直接访问这些数据时,使用 private 修饰符。通常与 getter 和 setter 方法一起使用,以便间接访问私有字段。

public class BankAccount {private double balance;  // 私有字段,不能被外部直接访问public void deposit(double amount) {if (amount > 0) {balance += amount;}}public double getBalance() {return balance;  // 提供一个公开方法来访问私有字段}
}

修饰符优先级(从高到低)

  • public:最开放的访问级别,允许任何地方访问。
  • protected:允许同一包内和子类访问。
  • default(包访问):仅允许同一包内访问。
  • private:最严格,仅允许类内部访问。

修饰符的应用场景:

  • public:在类和方法设计时使用,表示它们应该是开放的,允许任何地方访问。
  • protected:在设计类的继承体系时使用,特别是当你希望子类能够访问基类的某些功能时。
  • default:适用于不希望对外暴露的类,或者只希望类的成员在包内共享时使用。
  • private:用来封装类内部的数据,防止外部直接访问,常与方法一起使用来控制数据的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3993.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来

引言 当我们手握智能手机,流畅地滑动屏幕、切换应用、欣赏动画时,背后其实藏着一套庞大且精密的开源系统——Android AOSP(Android Open Source Project)。这套系统不仅是所有安卓设备的根基,也是系统开发者的终极 pl…

【机器学习实战入门】基于深度学习的乳腺癌分类

什么是深度学习? 作为对机器学习的一种深入方法,深度学习受到了人类大脑和其生物神经网络的启发。它包括深层神经网络、递归神经网络、卷积神经网络和深度信念网络等架构,这些架构由多层组成,数据必须通过这些层才能最终产生输出。…

ASP .NET Core 学习(.NET9)配置接口访问路由

新创建的 ASP .NET Core Web API项目中Controller进行请求时,是在地址:端口/Controller名称进行访问的,这个时候Controller的默认路由配置如下 访问接口时,是通过请求方法(GET、Post、Put、Delete)进行接口区分的&…

TextButton组件的功能与用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了CircleAvatar Widget,本章回中将介绍Button这种Widget,闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 关于Button相信大家都很熟悉,也就是我们常用的按钮。用户按下按钮后…

3. 后端验证前端Token

书接上回,后端将token返回给前端,前端存入cookie,每次前端给后端发送请求,后端是如何验证的。 若依是用过滤器来实现对请求的验证,过滤器的简单理解是每次发送请求的时候先发送给过滤器执行逻辑判断以及处理&#xff0…

RabbitMQ-消息可靠性以及延迟消息

目录 消息丢失 一、发送者的可靠性 1.1 生产者重试机制 1.2 生产者确认机制 1.3 实现生产者确认 (1)开启生产者确认 (2)定义ReturnCallback (3)定义ConfirmCallback 二、MQ的持久化 2.1 数据持久…

大文件上传服务-后端V1V2

文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节,把之前做的项目拿过来总结一下,自己写的一个…

Web小练习01

#制作简易网页# 本章包括主页、注册页面、登陆页面 主页 1.1主页代码如下 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

SpringBoot多级配置文件

1.问题先导 有这样的场景&#xff0c;我们开发完毕后需要测试人员进行测试&#xff0c;由于测试环境和开发环境的很多配置都不相同&#xff0c;所以测试人员在运 行我们的工程时需要临时修改很多配置&#xff0c;如下 java –jar springboot.jar –-spring.profiles.activete…

2,Linux文件基本属性(基于Ubuntu示例进行讲解)

创建文件 创建文件touch命令创建文件夹mkdir命令写入文件内容echo命令 # 创建文件夹&#xff0c;文件夹名称为demo_001 mkdir demo_001# 创建文件&#xff0c;文件名称为demo_file_001.py touch demo_file_001.py# 写入内容到文件中&#xff0c;例如写入print("hello wo…

蓝桥杯训练—斐波那契数列

文章目录 一、题目二、解析三、代码 一、题目 求100以内的斐波那契数列 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列 &#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&…

nginx 配置防爬虫

今天早上查看服务器&#xff0c;发现昨天发布的一个在线解析充电桩协议的网页工具有大量的访问记录&#xff0c;应该是爬虫在爬api接口数据。该工具api接口后台用的是python写的&#xff0c;和大多数项目一样也采用nginx反向代理&#xff0c;由于采用nginx&#xff0c;可以利用…

Mockito+PowerMock+Junit单元测试

一、单元测试用途 1、日常开发团队要求规范&#xff0c;需要对开发需求代码进行单元测试并要求行覆盖率达到要求&#xff0c;DevOps流水线也会开设相关门禁阀值阻断代码提交&#xff0c;一般新增代码行覆盖率80%左右。 二、Mock测试介绍 1、Mock是为了解决不同的单元之间由于…

左神算法基础提升--3

文章目录 Manacher 算法经典算法Manacher算法原理 单调栈或单调队列 Manacher 算法 经典算法 在每学习Manacher算法之前我们可能会使用一种比较经典暴力的算法&#xff1a;遍历str字符串&#xff0c;将字符串中的每个字符作为对称点&#xff0c;向两边扩散找到回文字段&#x…

Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅

引言&#xff1a;音浪太强&#xff0c;我稳如老 HAL&#xff01; 如果有一天你的耳机里传来的不是《咱们屯里人》&#xff0c;而是金属碰撞般的杂音&#xff0c;那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果&#xff01;在 Android 音频架构中&#xff0c…

OA-CNN:用于 3D 语义分割的全自适应稀疏 CNN

大家读完觉得有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 1介绍 2相关工作 基于点的学习。 基于 CNN 的学习。 动态卷积。 3全能自适应 3D 稀疏 CNN 3.1空间适应性感受野 赋予动机。 体素网格。 金字塔网格分区。 Adaptive 聚合器。 3.2自适应关…

聊聊如何实现Android 放大镜效果

一、前言 很久没有更新Android 原生技术内容了&#xff0c;前些年一直在做跨端方向开发&#xff0c;最近换工作用重新回到原生技术&#xff0c;又回到了熟悉但有些生疏的环境&#xff0c;真是感慨万分。 近期也是因为准备做地图交互相关的需求&#xff0c;功能非常复杂&#x…

Linux 操作二:文件映射与文件状态

Linux 操作二&#xff1a;文件映射与文件状态查询 文件映射 ​ mmap是一种内存映射文件的方法&#xff0c;即将一个文件或者其它对象映射到进程的地址空间&#xff0c;实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后&#xff0c;进程…

论文阅读:CosAE Learnable Fourier Series for Image Restoration

这是 2024 NeurIPS 上发表的一篇文章&#xff0c;介绍了一种新型的基于傅里叶级数的通用编码器。 Abstract 本文介绍了余弦自动编码器&#xff08;Cosine Autoencoder, CosAE&#xff09;&#xff0c;这是一种新颖的通用自动编码器&#xff0c;它将经典傅里叶级数与前馈神经网…

数据库服务体系结构

1. 数据库服务应用配置 服务进行配置有什么作用&#xff1f; 实现服务运行启动 实现某些功能 应用配置有三种方式&#xff1f; 利用编译安装进行配置 编写配置文件信息 ,.默认的配置文件: /etc/my.cnf 利用启动命令参数配置信息&#xff0c;mysqld_safe --skip-grant-tables --…