面试官竟然还问我 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 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
7 0
|
9天前
|
设计模式 SQL JavaScript
java面试宝典全套含答案
java面试宝典全套含答案
|
9天前
|
存储 Java
java面试题大全带答案_面试题库_java面试宝典2018
java面试题大全带答案_面试题库_java面试宝典2018
|
9天前
|
SQL 前端开发 Java
2019史上最全java面试题题库大全800题含答案(面试宝典)(4)
2019史上最全java面试题题库大全800题含答案(面试宝典)
|
9天前
|
SQL Java 数据库连接
2019史上最全java面试题题库大全800题含答案(面试宝典)(2)
2019史上最全java面试题题库大全800题含答案(面试宝典)
|
9天前
|
存储 设计模式 Java
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
|
9天前
|
SQL 算法 安全
java面试宝典_java基础面试_2018java面试题_2019java最新面试题
java面试宝典_java基础面试_2018java面试题_2019java最新面试题
|
9天前
|
算法 安全 网络协议
java高级面试题_java面试题大全带答案_线程面试题_java面试宝典2019
java高级面试题_java面试题大全带答案_线程面试题_java面试宝典2019
|
9天前
|
安全 算法 Java
java线程面试题_2019java面试题库
java线程面试题_2019java面试题库
|
9天前
|
算法 前端开发 Java
2019史上最全java面试题题库大全800题含答案(面试宝典)(3)
2019史上最全java面试题题库大全800题含答案(面试宝典)