- 面向对象设计中的一个基本问题:“如何区分变动的事物和不变的事物”
- Java为每个类创建一个唯一标识符组合。就是包的概念
- 一个 Java 源代码文件称为一个编译单元(有时也称翻译单元)。每个编译单元的 文件名后缀必须是 .java。在编译单元中可以有一个 public 类,它的类名必须与文件 名相同(包括大小写,但不包括后缀名 .java)。每个编译单元中只能有一个 public 类, 否则编译器不接受。如果这个编译单元中还有其他类,那么在包之外是无法访问到这些 类的,因为它们不是 public 类,此时它们支持主 public 类。
- 当编译一个 .java 文件时,.java 文件的每个类都会有一个输出文件。每个输出的 文件名和 .java 文件中每个类的类名相同,只是后缀名是 .class。当编译一个 .java 文件时,.java 文件的每个类都会有一个输出文件。每个输出的 文件名和 .java 文件中每个类的类名相同,只是后缀名是 .class。
- Java 包名按惯例一律 小写,即使中间的单词也需要小写,与驼峰命名不同
- package 和 import 这两个关键字将单一的全局命名空间分隔开,从而避免名称 冲突。
- 一个包从未真正被打包成单一的文件,它可以由很多 .class 文件构 成
- 默认访问权限没有关键字,通常被称为包访问权限(有时也称为 friendly)。这意 味着当前包中的所有其他类都可以访问那个成员。对于这个包之外的类,这个成员看上 去是 private 的。
- 包访问权限可以把相关类聚到一个包下,以便它们能轻易地相互访问。
- 关键字 protected 处理的是继承的概念,通过继承可以利用一个现有的类——我 们称之为基类,然后添加新成员到现有类中而不必碰现有类。我们还可以改变类的现有 成员的行为。
- protected 也提供包访问权限,也就是说,相同包内的其他类可以访 问 protected 元素。
- 在一个具有包访问权限的类中定义一个 public 的构造器并不能真的使这个 构造器成为 public,在声明的时候就应该标记为编译时错误。类必须也是public的。
- 访问控制通常被称为实现的隐藏。将数据和方法包装进类中并把具体实现隐藏被 称作是封装。其结果就是一个同时带有特征和行为的数据类型。
- 创建类的风格:public 成员放在类的开头,接着 是 protected 成员,包访问权限成员,最后是 private 成员。
- 每个编译单元(即每个文件)中只能有一个 public 类。
- public 类的名称必须与含有该编译单元的文件名相同,包括大小写。
- 所以对于类的访问权限只有两种选择:包访问权限或者 public。为 了防止类被外界访问,可以将所有的构造器声明为 private,这样只有你自己能创建对 象(在类的 static 成员中)
- 控制成员访问权限有两个原因。第一个原因是使用户不要接触他们不该接触的部 分,这部分对于类内部来说是必要的,但是不属于客户端程序员所需接口的一部分。第二个也是最重要的原因是为了让类库设计者更改类内部的工作方式,而不用担 心会影响到客户端程序员。