Access level modifiers determine whether other classes can use a particular field or invoke a particular method. There are two levels of access control:
- At the top level—
public, or package-private (no explicit modifier).
- At the member level—
public, private, protected, or package-private (no explicit modifier).
访问权限修饰词决定是否别的类可以使用一个特别的field或者调用一个特别的方法。下面是访问控制的两个水平:1、 top level--public,或者packgage-private//可以理解为类的级别 2、member level--public,private,protected,or package-private //可以理解为类的内部级别
A class may be declared with the modifier public, in which case that class is visible to all classes everywhere. If a class has no modifier (the default, also known as package-private), it is visible only within its own package (packages are named groups of related classes—you will learn about them in a later lesson.)
1、一个类可以被public修饰,意味着这个类可以被任何地方的任何类来访问。
2、无修饰词(默认形式,被称作package-private),他只能被他所在的包内的类访问
At the member level, you can also use the public modifier or no modifier (package-private) just as with top-level classes, and with the same meaning. For members, there are two additional access modifiers: private and protected. The private modifier specifies that the member can only be accessed in its own class. The protected modifier specifies that the member can only be accessed within its own package (as with package-private) and, in addition, by a subclass of its class in another package.
1、public,成员可以被任何地方的任何类来访问。
2、无修饰词(默认形式,被称作package-private),只能被他所在的包内的类访问。
3、private,成员只能被他自己的类访问,其他的外面的都不可以访问。
4、protected,成员只能被他所在的包和他的子类访问。比package-private访问范围大一些。
The following table shows the access to members permitted by each modifier.
Access Levels Modifier Class Package Subclass World
public |
Y |
Y |
Y |
Y |
protected |
Y |
Y |
Y |
N |
| no modifier |
Y |
Y |
N |
N |
private |
Y |
N |
N |
N |
The first data column indicates whether the class itself has access to the member defined by the access level. As you can see, a class always has access to its own members. The second column indicates whether classes in the same package as the class (regardless of their parentage) have access to the member. The third column indicates whether subclasses of the class — declared outside this package — have access to the member. The fourth column indicates whether all classes have access to the member.
第一列表示类本身是否有权限访问被访问权限修饰符修饰的类成员,可以看到,类总是可以访问他们的成员。
第二列表示在同一个包内的类是否可以访问成员,可以看到,除了private修饰的,其他的都可以访问。
第三列表示是否类的子类(在包外面的)可以访问成员,可以看到,private,包内部的不可以访问,其他ok
第四列表示是否任何类可以访问,可以看到,只有被public修饰,任何类才可以访问。
Access levels affect you in two ways. First, when you use classes that come from another source, such as the classes in the Java platform, access levels determine which members of those classes your own classes can use. Second, when you write a class, you need to decide what access level every member variable and every method in your class should have.
访问控制权限通过两个方法影响你的编程。1、当你使用的类来自另外的地方,例如java平台,访问控制权限决定了这些类中的那些成员你可以使用。2、当你写类时,你需要决定你的成员参数和方法使用什么样子的访问权限,以决定你的类的用途。
Let's look at a collection of classes and see how access levels affect visibility. The following figure shows the four classes in this example and how they are related.
Classes and Packages of the Example Used to Illustrate Access Levels
The following table shows where the members of the Alpha class are visible for each of the access modifiers that can be applied to them.
Visibility Modifier Alpha Beta Alphasub Gamma
public |
Y |
Y |
Y |
Y |
protected |
Y |
Y |
Y |
N |
| no modifier |
Y |
Y |
N |
N |
private |
Y |
N |
N |
N |
Tips on Choosing an Access Level: If other programmers use your class, you want to ensure that errors from misuse cannot happen. Access levels can help you do this.
- Use the most restrictive access level that makes sense for a particular member. Use
private unless you have a good reason not to.
- Avoid
public fields except for constants. (Many of the examples in the tutorial use public fields. This may help to illustrate some points concisely, but is not recommended for production code.) Public fields tend to link you to a particular implementation and limit your flexibility in changing your code.
选择访问控制的细节:
1、给一个特殊的成员使用最严格的访问控制权限。使用private除非你有一个恰当的理由不用它。
2、除非是常数,否则不要使用public。public fields使你进行一个特殊的执行,并且会限制你代码的自由度。