面试官竟然还问我 Java 权限修饰符,一时不知道怎么回答。。。

简介: 面试官竟然还问我 Java 权限修饰符,一时不知道怎么回答。。。

大家好,我是鸭哥。


昨天鸭哥在微信群里,看到一个面试者诉苦,说自己面试时被提问权限修饰符的相关知识,要求说出 public、protected、default(无修饰符,即package private) 和 private 的区别,结果他只能根据单词的字面意思说个大概,面试官的态度迅速就冷淡了。面试前,没能把握好这类基础知识,他追悔莫及。


鸭哥想说,权限修饰符虽然是基础知识,但是怎么合理恰当地运用却是编程功底的体现,应该多思考对比不同修饰符的运用场景。我们这里的大部分读者应该是熟悉这类知识的,但是面试机会只有一次,鸭哥还是要和大家一起全面复习下~


权限修饰符的修饰对象和权限控制


  • 修饰类:使用public、default(package private,无修饰符)
  • 修饰变量和方法:使用public, private, protected 或 default ( package private,无修饰符)

如果一个类用 public 修饰,那么它对任何位置的所有类可见;如果一个类无修饰符,即 default ,那么它只对同一个包中的其他类可见,因此也被称为 package private.


对于类中的变量和方法,当使用 public 和 无修饰符时,访问权限与修饰类时相似。除此之外,类中的变量和方法,还可以用 private 和 protected 修饰。当使用 private 时,该变量或方法只能在本类中访问;当使用 protected 时,该变量或方法能在同一个包中被访问,或者被不同包的该类的子类访问。


不够直观?鸭哥特意整理了表格!


访问权限控制


修饰符 当前类 同一个包 子类(不同包) 其他包
public
protected ×
no modifier × ×
private × × ×


实例演示


image.png


如上图所示,有包 1 和包 2 ,testClassSub 是 testClass 的子类,Alpha是包1的另一个类,Beta是包2的另一个类。下表展示的是,当使用不同的修饰符修饰 testClass 的成员变量或方法时,不同包中的不同类的访问权限。


修饰符 testClass Alpha testClassSub Beta
public
protected ×
no modifier × ×
private × × ×


权限修饰符的设置和运用


如果其他人可能会用到你编写的类,为了少出错,我们可以尽量这样设置访问权限:


  • 使用最严格的限制规则,也就是默认使用 private 修饰符。除非某个方法需要暴露给其他类使用,否则一律限制变量和方法仅本类可见;
  • 尽量避免使用 public 修饰符,它将会限制你更改代码的灵活性


第二点怎么来理解呢?当你使用 public 时,修饰的内容对其他人是可见的,别人可能会使用这些公共的内容,这时候,当你需要更改时,别人也需要随之修改。最主要的是,用的人多了,你根本不知道有谁在用,你还能轻易修改 public 修饰的内容吗,代码的灵活性自然就降低了。


相关文章
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
5月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
337 0
|
4月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
452 0
|
2月前
|
安全 架构师 Java
90% Java新手踩坑!彻底搞懂这4个权限修饰符
Java权限修饰符看似简单,却暗藏致命风险:`public`暴露数据、`protected`跨包失控、默认权限成地雷。本文通过3大真实案例+1张神图,深度解析`private`、`default`、`protected`、`public`的作用域与内存可见性,揭示Spring Bean、继承陷阱、包级漏洞的根源,并奉上防御性编程5大原则,助你筑牢代码第一道防线。
234 1
|
3月前
|
安全 前端开发 Java
Java包管理与访问控制权限详解
本文深入讲解Java包管理和访问控制,涵盖包的创建与使用、访问权限的四个层级,并结合实战案例分析如何设计合理的包结构和访问权限,帮助开发者提升代码的安全性与可维护性。
|
4月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
228 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
2月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
5月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
3088 48
|
5月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
169 5