Java——权限修饰符
一、权限修饰符的继承访问规则
以下按访问范围从宽到窄排序:
修饰符 | 同包同类 | 同包子类 | 同包非子类 | 跨包子类 | 跨包非子类 |
---|---|---|---|---|---|
public | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
protected | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
默认 (包级) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
private | ✔️ | ❌ | ❌ | ❌ | ❌ |
关键点:
private
成员:子类无法直接访问,需通过父类提供的public/protected
方法间接操作(如getter/setter
)12。protected
成员:- 允许跨包子类直接访问(如
Child
类继承Parent
类后可直接调用父类protected
方法)。 - 同包内非子类也可访问(如
Test
类与Parent
同包时可直接调用protected
方法)13。
- 允许跨包子类直接访问(如
- 默认(包级):仅允许同包内的子类或非子类访问。
示例:
// 父类(包com.example)
public class Parent {protected String name; // 跨包子类可访问String id; // 仅同包子类可访问private int age; // 子类不可访问
}// 子类(包com.other)
public class Child extends Parent {void accessFields() {name = "Child"; // ✔️ 允许访问protected字段// id = "123"; // ❌ 跨包无法访问默认权限字段// age = 10; // ❌ 无法访问private字段}
}
二、方法重写的权限修饰符规则
子类重写父类方法时,访问权限必须 ≥ 父类方法(保证“里氏替换原则”):
- 父类方法为
public
→ 子类必须为public
。 - 父类方法为
protected
→ 子类可为protected
或public
。 - 父类方法为默认权限 → 子类可为默认、
protected
或public
。 - 禁止缩小权限:如父类方法为
protected
,子类重写时不能改为private
或默认14。
示例:
class Parent {protected void show() {} // 父类protected方法
}class Child extends Parent {@Overridepublic void show() {} // ✔️ 允许扩大权限(protected → public)// @Override// private void show() {} // ❌ 禁止缩小权限(protected → private)
}
三、构造方法与super
关键字的权限限制
- 构造方法继承:
- 子类构造方法默认调用父类无参构造
super()
。 - 若父类无无参构造,子类必须显式调用
super(参数)
,且父类对应构造方法的权限需对子类可见6。
- 子类构造方法默认调用父类无参构造
super
的使用:super
可调用父类的非私有方法或访问非私有字段。super
不能在静态方法(如main
)中使用,因为其依赖于对象实例1。
示例:
class Parent {protected Parent(int x) {} // 有参构造
}class Child extends Parent {public Child() {super(10); // ✔️ 显式调用父类protected构造方法}
}
四、官方文档补充
根据Java官方规范:
private
方法:不可被继承,即使子类中出现同名方法,也视为新方法(非重写)7。final
修饰符:若父类方法被声明为final
,子类无法重写该方法7。
五、最佳实践
- 最小权限原则:优先使用
private
,逐步放宽至protected
或public
。 - 继承设计:
- 若父类方法需被子类扩展,使用
protected
。 - 若父类字段需被子类访问但对外隐藏,使用
protected
或提供getter/setter
25。
- 若父类方法需被子类扩展,使用
参考资料:12347
相关文章:
Java——权限修饰符
一、权限修饰符的继承访问规则 以下按访问范围从宽到窄排序: 修饰符同包同类同包子类同包非子类跨包子类跨包非子类public✔️✔️✔️✔️✔️protected✔️✔️✔️✔️❌默认(包级)✔️✔️✔️❌❌private✔️❌❌❌❌ 关键点…...
一周学会Flask3 Python Web开发-redirect重定向
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们学过渲染到模板页面,这个其实是一种内部的转发,浏览器地址栏地址没有变化。如果我们想重定向…...
python面向对象:方法
1. 实例方法 实例方法用于操作实例变量,必须包含 self 参数。 class Person:def __init__(self, name):self.name namedef greet(self):print(f"Hello, my name is {self.name}")person1 Person("Alice") person1.greet() # 输出ÿ…...

物联网简介集合
物联网(IoT)指的是物理设备(如电器和车辆)之间的互联互通。这些设备嵌入了软件、传感器和连接功能,使其能够相互连接并交换数据。这项技术实现了从庞大的设备网络中收集和共享数据,为打造更高效、自动化的系…...
centos下使用pyenv管理python版本
在 CentOS 上安装 pyenv 和 pyenv-virtualenv,可以按照以下步骤进行操作: ps: centos7 最高适配到3.9.* 步骤 1:安装依赖 首先,确保你的系统中安装了必需的依赖项。你可以使用以下命令安装它们: [root ~]# yum gro…...

C++:类与对象,定义类和构造函数
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; //如何让定义一个类 // 封装 // 1、将数据和方法定义到一起。 // 2、把想给你看的数据给你看,不想给你看的封装起来。 通过访问限定符来实现 class Stack { public: //1.成…...

【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略
应对消息丢失、重复、顺序与积压的全面策略 引言kafka消息丢失生产者消费者重复消费顺序消费消息积压生产者消费者其他RabbitMQ消息丢失生产者事务机制,保证生产者发送消息到 RabbitMQ Server发送方确认机制,保证消息能从交换机路由到指定队列保证消息在 RabbitMQ Server 中的…...

解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”
一、神经网络:AI 领域的 “超级引擎” 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森…...
Android14(13)添加墨水屏手写API
软件平台:Android14 硬件平台:QCS6115 需求:特殊品类的产品墨水屏实现手写的功能,本来Android自带的Input这一套可以实现实时展示笔迹,但是由于墨水屏特性,达不到正常的彩屏刷新的帧率,因此使用…...
flyway的ignoreMigrationPatterns
1、概述 ignoreMigrationPatterns 是 Flyway 中的一个配置选项,用于指定在迁移过程中可以忽略的迁移脚本的模式。这个选项通常用于在特定情况下跳过某些迁移脚本的执行,例如在开发环境中跳过某些测试数据脚本,或者在特定条件下忽略某些已经不…...

25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型
看文献过程中不断发现有太多不懂的基础知识,故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关,故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…...

华为动态路由-OSPF-骨干区
华为动态路由-OSPF-骨干区 一、OSPF简介 1、OSPF概述 OSPF是一种开放式的、基于链路状态的内部网关协议(IGP),用于在自治系统内部进行路由选择和通信。 OSPF是互联网工程任务组(IETF)定义的标准之一,被广…...
接口测试-API测试中常用的协议(中)
一、SOAP SOAP(Simple Object Access Protocol)即简单对象访问协议,是一种基于 XML 的用于在网络中交换结构化信息的协议,常用于 Web 服务之间的通信。以下为你详细介绍: 产生背景 在互联网发展过程中,需…...

植物大战僵尸杂交版v3.2.1最新版本(附下载链接)
B站游戏作者潜艇伟伟迷于12月21日更新了植物大战僵尸杂交版3.2.1版本!!!,有b站账户的记得要给作者三连关注一下呀! 不多废话下载链接放上: 夸克网盘链接::https://pan.quark.cn/s/e5…...

java每日精进 2.20 MQ相关复健
在 RabbitMQ 中,消息消费者对消息的签收(acknowledgment)可以通过三种方式进行管理:自动签收、手动签收 和 拒绝签收。它们主要控制消费者如何处理消息确认和消息的重新排队。下面详细讲解它们的区别,并通过代码示例展…...

【设计模式精讲】结构型模式之代理模式(静态代理、JDK动态代理、cglib动态代理)
文章目录 第五章 结构型模式5.1 代理模式5.1.1 代理模式介绍5.1.2 代理模式原理5.1.3 静态代理实现5.1.4 JDK动态代理5.1.4.1 JDK动态代理实现5.1.4.2 类是如何动态生成的5.1.4.3 代理类的调用过程 5.1.5 cglib动态代理5.1.5.1 cglib动态代理实现5.1.5.2 cglib代理流程 5.1.6 代…...

京东广告基于 Apache Doris 的冷热数据分层实践
一、背景介绍 京东广告围绕Apache Doris建设广告数据存储服务,为广告主提供实时广告效果报表和多维数据分析服务。历经多年发展,积累了海量的广告数据,目前系统总数据容量接近1PB,数据行数达到18万亿行,日查询请求量8…...

win11 安装pyenv来管理python
1、使用power shell或者cmd来安装: 2、使用pyenv 发现并没有pyenv。 3、在环境变量中增加: 路径:右键--此电脑--属性--高级系统设置--环境变量--Path--增加刚才--target所在的目录D:\tools\pyenv\pyenv-win\bin。 先退出当前的,…...
【AI】GitHub Copilot
GitHub Copilot 是一款由 GitHub 和 OpenAI 合作开发的 AI 编程助手,它可以在多种开发工具中使用。以下是 GitHub Copilot 支持的主要开发工具和平台: 1. Visual Studio Code (VS Code) 官方支持:GitHub Copilot 在 VS Code 中拥有最完整的集…...

【LeetCode 热题100】76. 最小覆盖子串的算法思路及python代码
76. 最小覆盖子串 给你一个字符串 s s s、一个字符串 t t t。返回 s s s 中涵盖 t t t 所有字符的最小子串。如果 s s s 中不存在涵盖 t t t 所有字符的子串,则返回空字符串 ‘ ‘ " \quad" ‘‘" 。 注意: 对于 t t t 中重复…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...