Java 面向对象的特性
面向对象具有三种基本特性:封装、继承、多台。这三种特性不是 Java 中特有的,而是面向对象的语言所共有的。
1. 封装
封装就是将数据和方法包装进类中并把具体实现隐藏。隐藏实现(implement hiding)的意思是就是访问控制。访问控制将接口与实现分离。对客户端程序员来说,访问控制划分了其使用类库(library)的边界,即指定了哪些能使用哪些不能使用。对类库提供者来说,可以自由地修改内部实现而不用担心影响到客户端代码的可能。
Java 中的访问机制和 Java 的包组织机制紧密相关,所以这里先对包的相关概念作一些阐述。
包是一组类
简单来说,包就是处在同级目录下的一组类,包的集合称为类库。Java 通过目录结构,结合 package 与 import 关键字,形成了一种命名空间(namespace)的管理机制。使用 package 语句,同级目录下的类被组织到同一命名空间下。注意,package 语句必须处于文件中非注释代码的第一行。
// tool/ironware/Wrench.java
package tool.ironware;
public class Wrench {
// ...
}
这种命名空间的管理方式可以很好的解决类名冲突的问题,在不同包中定义同名的类是不存在问题的。在需要用到类时,可以使用完整的名称,这种方式可以防止类名冲突,而更方便的做法是使用 import 语句事先导入该类。
// tool/Decoration.java
import tool.ironware.Wrench;
public class Decoration {
public static void main(String[] args) {
Wrench w = new Wrench();
// ...
}
}
为了创建唯一的包名,通常的做法是使用创建者的 Internet 域名的反序作为包结构。如com.cnblogs.home,实际得到的就是在根目录下的路径名 com/cnblogs/home 。
访问权限修饰符
Java 中的访问控制通过访问权限修饰符来实现。各修饰符及其对应的访问权限如表所示:
修饰符 | 访问权限 | 解释 |
---|---|---|
public | 接口访问权限 | 从任何位置都可随意访问 |
protected | 继承访问权限 | 同包中以及子类可访问 |
空(default) | 包访问权限 | 默认情况,同包中可访问 |
private | 无访问权限 | 仅在本类中可访问 |
每个访问权限修饰符只对其所修饰的对象(数据/方法/类)起作用。