详解Java中的protected修饰的访问权限

简介: 详解Java中的protected修饰的访问权限

前言:在Java中,类成员访问权限修饰词有四类:private,缺省(说白了就是空)着)protected 和 public,private,缺省,和 public的访问权限都很好理解,但是protected的访问权限却使人茫然若迷,一叶蔽目,不见泰山。


先来看一下protected修饰的大体访问权限:

同一个类中 同一个包中 不同包的子类 不同包的无关类
protected             √             √             √             ❌

总结:即protected可以访问的权限为在同一个类中,在同一个包中,继承有protected修饰的类的子类中。

 

这一句话看着简单但是其中有许多的注意点!!!我们挨个分析。

1.同一个类中

如图:

在写一个标准JavaBean时,get 和 set 方法里面都直接调用protected修饰的成员变量,说明可以直接调用。

2.同一个包中

如图:

从上图中,我们可以看到在同一个包中,可以直接使用protected修饰的变量,并且无论是使用子类创建的对象还是父类创建的对象都可以访问protected修饰的变量。

3.不同包的子类

       在不同包的子类中的情况会有些多,所以我们一个个讲解。

(1)有一个包A与父类在同包,但是包B却不在父类所在的包中

从上图中,我们可以看到有一个子类与父类同包,但是另一个子类与父类不同包,同包子类对象可以直接使用protected修饰的变量,另一个子类即使不在自己的作用域内创建对象也可以直接使用protected修饰的变量,并且无论是使用子类创建的对象还是父类创建的对象都可以访问protected修饰的变量。

(2)两个子类的包都不在父类的包中,但是两个子类却同包

从上图中,我们可以看到两个子类和父类都不同包,但是两个子类却同包,在该子类(Dog)的自己的作用域中创建自己的对象调用protected修饰的变量是可以的,但是Cat类在别人的作用域里面创建对象调用不了protected修饰的变量,并且也不可以创建父类的对象调用父类自己的方法。

(3)两个子类的包都不在父类的包中

从上图中,我们可以看到两个子类和父类都不同包,在该子类(Dog)的自己的作用域中创建自己的对象调用protected修饰的变量是可以的,但是Cat类在别人的作用域里面创建对象调用不了protected修饰的变量,并且也不可以创建父类的对象调用父类自己的方法。

注:当父类中的变量被protected修饰的同时还被static修饰,同包子类对象可以直接使protected修饰的变量,另一个子类即使不在自己的作用域内创建对象也可以直接使用protected修饰的变量,父类创建的对象也可以访问protected修饰的变量。(简单来说就是上边的情况全都可以实现了,都不会报错)

相关文章
|
7月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
501 6
|
8月前
|
安全 架构师 Java
90% Java新手踩坑!彻底搞懂这4个权限修饰符
Java权限修饰符看似简单,却暗藏致命风险:`public`暴露数据、`protected`跨包失控、默认权限成地雷。本文通过3大真实案例+1张神图,深度解析`private`、`default`、`protected`、`public`的作用域与内存可见性,揭示Spring Bean、继承陷阱、包级漏洞的根源,并奉上防御性编程5大原则,助你筑牢代码第一道防线。
336 1
|
9月前
|
安全 前端开发 Java
Java包管理与访问控制权限详解
本文深入讲解Java包管理和访问控制,涵盖包的创建与使用、访问权限的四个层级,并结合实战案例分析如何设计合理的包结构和访问权限,帮助开发者提升代码的安全性与可维护性。
|
9月前
|
存储 安全 Java
java: 无法访问org.springframework.ldap.core.LdapTemplate
java: 无法访问org.springframework.ldap.core.LdapTemplate
239 9
|
11月前
|
缓存 Java 数据库
Java 访问修饰符使用方法与组件封装方法详细说明
本文详细介绍了Java中访问修饰符(`public`、`private`、`protected`、默认)的使用方法,并结合代码示例讲解了组件封装的核心思想与实现技巧。内容涵盖数据封装、继承扩展、模块化设计与接口隔离等关键技术点,帮助开发者提升代码的可维护性与安全性,适用于Java初学者及进阶开发者学习参考。
233 1
|
存储 算法 安全
Java对象创建和访问
Java对象创建过程包括类加载检查、内存分配(指针碰撞或空闲列表)、内存初始化、对象头设置及初始化方法执行。访问方式有句柄和直接指针两种,前者稳定但需额外定位,后者速度快。对象创建涉及并发安全、垃圾回收等机制。
164 0
Java对象创建和访问
|
NoSQL JavaScript 前端开发
Java访问MongoDB
Java访问MongoDB
224 21
|
供应链 安全 Java
探索 Java 权限修饰符的奥秘
本文深入探讨了Java中的权限修饰符
246 12
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
2799 1