您是Java程序员,所以您知道我在说什么。 public
修饰符使方法或字段可从应用程序中的任何位置访问。 那是简单的部分。 但是,您能告诉我protected
包和私有包的区别吗? (提示:当您不在方法或字段前面编写任何访问修饰符时,package private是对方法或字段的保护。请注意!我说谎!)我的采访经历是很多人不知道的。 对于Java开发人员,我是否认为这是不可行的? 并不是的。 即使您不知道,您仍然可能是一名优秀的Java开发人员。 也许现在您将在某个地方查找它。 也许Java规范是一个很好的入门文档。
我会告诉你一些更有趣的事情。
从字面上看,没有候选人知道什么是
private
。 而您,阅读本文,也不知道。
好的,这很挑衅。 您可能是少数几个碰巧用这种无用信息填充大脑的人之一,甚至您可能已经阅读了Java规范。
大多数Java程序员认为私有方法和字段只能从类内部访问。 有些人甚至认为仅来自对象实例内部。 他们相信:
public class PrivateAccessOtherObject {public PrivateAccessOtherObject(int i) {this.i = i;}private int i;void copyiTo(PrivateAccessOtherObject other){other.i = i;}
}
不可能。 (它是。)
那么什么是私人的?
最新的JLS说, 私有类成员或构造函数只能在包含成员或构造函数声明的顶级类(第7.6节)的正文中访问。
Java规范中的示例并不是最好的描述规则。 也许那只是一个简单的例子。 像这样的东西可能更好地解释了这个概念:
public class PrivateFieldsContainingClass {private static class NestedClass {private int i;}private NestedClass nestedClassInstance = new NestedClass();void set(int i) {nestedClassInstance.i = i;}int get() {return nestedClassInstance.i;}
}
可以从封闭类以及NestedClass
内部访问字段i
。 这个例子也很简单,但更使规范例子错过了。 这种可能性有什么实际用途? 并不是的。
奖励问题:为什么我说我在说谎?
翻译自: https://www.javacodegeeks.com/2014/08/java-private-protected-public-and-default.html