Java权限修饰符太简单?面试官用它秒刷50%候选人!

B站影视 2024-11-29 09:52 2

摘要:Hi,大家好,我是小米,一个热爱分享技术的小伙伴。今天呢,我想和大家聊聊Java社招面试中一个经典又常见的问题:访问修饰符 public, private, Protected,以及默认(不写修饰符)时的区别。

Hi,大家好,我是小米,一个热爱分享技术的小伙伴。今天呢,我想和大家聊聊Java社招面试中一个经典又常见的问题:访问修饰符 public, private, Protected,以及默认(不写修饰符)时的区别

很多小伙伴一看到这个问题,可能心里就会想:哎呀,这不简单吗?面试官居然考这种入门级问题!但你真别小看它,稍不注意就容易掉坑!所以今天,咱们用讲故事的方式,把这个问题掰开了揉碎了讲清楚!

话说有一家软件公司,里面有四位员工:Public哥、Protected哥、Default哥(也叫包权限哥)和Private哥。这四位兄弟性格迥异,各自掌管着不同的权限。某天,大家为了争夺“谁的权限范围最广”的头衔,吵了起来。

于是,项目经理提议:我们模拟几种实际场景,看看谁的权限范围到底有多大!

“我的权限范围最大!谁都能访问我,无论是公司内的同事,还是外面的陌生人,甚至是全球任何地方的用户!”

项目经理点点头,测试了一下,果然如此。只要public修饰的字段、方法或类,全世界任何地方都能访问到,比如:

“别光看他耀眼,我的权限虽然不如他,但在自己的家(包)里,我说了算!谁要是和我同住一个包,随便访问;但只要出了包的范围,对不起,没门儿!”

经理又写了一个例子:

同一个包内的类可以随意访问 DefaultDemo 的字段和方法;包外的类尝试访问时,编译器直接报错。

“我呢,权限范围比 Default 哥稍微大一点儿。除了包里的所有人可以访问我,还有一个特权——那些和我有血缘关系的‘子类’也能访问!”

经理觉得挺有意思,做了如下测试:

然后,在同一个包内的类可以轻松调用 sayHello。接着,经理在另一个包写了一个子类:

结果,子类访问成功了!这说明 Protected哥不但允许包内访问,还给子类开了小灶,真是个照顾子孙的好大哥。

“我的权限虽然最小,但我的安全性是最强的!除了我自己,谁都别想碰我的东西!”

经理试了试:

结果显示:

PrivateDemo 类之外,任何人都无法访问 message 和 sayHello;只有 PrivateDemo 自己可以通过 callPrivateMethod 间接调用私有方法。

为了方便记忆,经理在白板上画了一个图表,总结了四兄弟的权限范围:

是不是清晰又简单?

知道这些区别后,在面试中可能会遇到哪些变种问题呢?小米总结了一些常见的坑,大家可以提前练习一下!

类的访问修饰符:Java 中类本身只能是 public 或默认访问级别,不能是 private 或 protected。方法覆盖(Override)和修饰符:子类覆盖父类方法时,访问权限不能比父类更低。例如父类是 protected,子类覆盖时不能改为 default 或 private。构造方法的权限控制:如果构造方法是 private,外部类就无法直接创建对象。这种设计常用于单例模式。接口中的字段和方法:接口中的字段默认是 public static final,方法默认是 public。

好了,今天的分享就到这里啦!Java 的访问修饰符虽然看似简单,但实际应用中经常涉及到权限设计和代码的可维护性。如果你在面试中遇到类似问题,记得举例说明,顺便结合场景谈谈你的设计思路,这样面试官会觉得你不仅懂理论,还很实战!

我是小米,一个喜欢和大家分享技术的程序员。欢迎点赞、转发、关注!我们下次再聊~

来源:安博新高考

相关推荐