Controlling Access to Members of a Class:
http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html引用
There are two levels of access control:
At the top level—public, or package-private (no explicit modifier).(类级访问修饰符只有public和default两个)
At the member level—public, private, protected, or package-private (no explicit modifier).(成员(变量、方法)级的有这四个)
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.)
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.
java中,若类和成员(变量、方法)前无访问修饰符,则为包访问权限;常称之为default、friendly或package-private。即:
default = friendly = package-private
访问修饰符从宽到严:
public protected default(friendly、package-private) private
| 当前类 | 同一包内 | 子孙类 | 其他包非子孙类(前三个之外的所有其他) |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default(friendly、package-private) | √ | √ | × | × |
private | √ | × | × | × |
同一包内的可以认为是朋友;子孙类可以认为是子女;从default访问修饰符可以看出,相比子女,朋友更亲!
一个特殊的情况是接口:
接口中的引用
All methods in an interface are implicitly public and abstract (but not final).
All fields in an interface are implicitly public, static and final.
在接口的方法/属性上使用上述修饰符都是多余的!建议直接省略,否则接口的方法写成 public String getXXX(), 整的好像接口的方法可以是非public似的!
访问修饰符不可以用在局部变量上,否则编译不通过。原因显而易见:局部变量的scope就是定义该局部变量的方法内,加访问修饰符是没有意义的。
http://wuaner.iteye.com/admin/blogs/1666376
抽象方法的访问修饰符只能是public或者protected。不能是private是因为抽象方法应该被重写,private使方法对子类不可见;语法上抽象方法可以不加访问修饰符(default访问权限),但最好不要这样做,因为会导致位于不同包下的抽象类之子类对抽象类的该抽象方法不可见。如下:
package lxg.oo.abstractclass;
public abstract class AbstractClassTest {
abstract void aMothed();
}
package lxg.oo;
import lxg.oo.abstractclass.AbstractClassTest;
/**
* 该实体类和其继承的抽象类在不同包下
* 只能有两个选择:声明当前类也为抽象,或者修改抽象父类AbstractClassTest中抽象方法的访问修饰符为public|protected
*
*/
public class ConcreteClassInAnotherPackage extends AbstractClassTest {
}
分享到:
相关推荐
Java有四种访问修饰符:`public`、`protected`、`private`和默认(无修饰符)。`public`表示全局可见,`protected`限制在同包和子类中可见,`private`仅限于同一类内,而默认(包访问权限)则只对同一包内的类可见...
Java有四种访问修饰符:`private`(私有)、`default`(包级私有)、`protected`和`public`(公共)。 5. **原始数据类型与对象**:Java中的原始数据类型(如int、char)不能直接作为对象使用。为了将它们当作对象...
2. 访问修饰符(access modifiers):在Java中,访问修饰符包括`private`、`public`和`protected`,以及默认(包私有)。题目中提到局部变量`s`前不能放置访问修饰符,这是正确的。局部变量只在方法内部可见,不需要...
Java有四种权限修饰符:public、protected、default(无修饰符)和private。public类和成员可以在任何地方访问,protected成员在同一包内和子类中可见,default成员仅在同一包内可见,private成员只能在声明它们的...
Java 提供了四种访问修饰符:`public`、`protected`、`default`(无修饰符)和`private`。`public`修饰的成员可以在任何地方被访问,`protected`允许在同一个包或子类中访问,`default`(无修饰符)仅限于同一包内...
9. **访问修饰符(Access Modifiers)**: Java提供了public, protected, private和默认四种访问修饰符,用于控制类、方法和变量的访问权限。 10. **异常处理(Exception Handling)**: 在Java中,异常处理是...
主要有四种访问修饰符: - `public`: 公开的,可以在任何地方被访问。 - `private`: 私有的,仅在同一类内部可见。 - `protected`: 受保护的,允许在同一个包内或者子类中访问。 - 缺省(无修饰符): 也称为...
6. 访问修饰符(Access Modifiers):Java提供了四种访问修饰符,分别是public、private、protected和默认(无修饰符)。它们控制类的成员(属性和方法)在不同范围内的可见性。 7. 封装(Encapsulation):封装是...
10. **访问修饰符(Access Modifiers)**:如public、private、protected,控制类成员的访问权限。 11. **抽象类(Abstract Class)**:不能实例化的类,通常用于定义接口或提供部分实现。 12. **静态(Static)**...
6. 访问修饰符(Access Modifiers): Java提供了`public`, `private`, `protected`和默认的访问修饰符,用来控制类的属性和方法的可见性。例如,`private`表示仅限类内部访问,`public`则允许任何地方访问。 7. ...
- **访问修饰符**(Access Modifiers):如public、private、protected等,控制类的属性和方法对外的可见性和可访问性。 - **封装**:通过访问修饰符限制对数据的直接访问,提高代码的安全性和可维护性。 4. **...
10. **访问修饰符(Access Modifiers)**:Java有四种访问修饰符:public、private、protected和默认(包访问)。它们控制类、方法和变量的可见性。 11. **构造器(Constructor)**:构造器是与类同名的方法,用于初始...
在Java中,访问修饰符(access modifiers)用于控制类、变量、方法或者构造函数的可见性和可访问性。Java支持四种不同的访问级别:`public`、`private`、`protected` 和 默认(也称为 `package-private` 或 `...
- 访问修饰符(Access Modifiers):public、private、protected和默认,控制类、成员变量和方法的访问权限。 - this关键字:引用当前对象,常用于构造器和方法中。 - final关键字:用于声明不可改变的变量或防止...
访问修饰符(Access Modifiers) Java 提供了四种不同的访问级别来控制对类、属性、方法和其他成员的访问:`public`、`protected`、`default`(包私有)和 `private`。 - **public**:表示公开,可以在任何地方...
4. **访问修饰符(Access Modifier)**:在题目中,`private`修饰的类`Base`不能被外部类直接访问,因此`P2 p2 = new P2(); p2.afancymethod();`会报编译错误。 5. **静态变量与实例变量(Static and Instance ...
在Java中,通过访问修饰符(如`public`, `private`, `protected`)实现封装。 4. **继承(Inheritance)**:继承允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法,从而实现代码重用和扩展。Java...
本章节可能涵盖了类、包(package)以及访问修饰符(access modifiers)等关键概念。 首先,让我们讨论“包”。在Java中,包是一种命名空间管理机制,用于避免类名冲突。它将相关的类和接口组织在一起,提供了一种...
16. **访问修饰符(Access Modifiers)**:如 `public`、`private`、`protected` 和默认修饰符,控制类、方法和变量的访问权限。 17. **静态(Static)**:修饰符,用于声明类级别的成员,而不是对象级别的。如 `...
在Java中,通过访问修饰符(public, private, protected等)来实现封装。 4. **继承(Inheritance)**:继承允许一个类(子类)继承另一个类(父类)的属性和方法,子类可以扩展父类的功能,同时也可以有自己的特定...