读Java编程艺术之笔记(访问权及四种Java类)
在Java中,除了public,private和protected之外,还存在着一种package(包访问权,无访问修饰符)访问权,是Java默认的访问权。
同一个类 | 同一个包中的类 | 同一个包中的子类 | 其他包中的子类 | 其他包中的类 | |
public | 可被访问 | 可被访问 | 可被访问 | 可被访问 | 可被访问 |
protected | 可被访问 | 可被访问 | 可被访问 | 可被访问 | |
package | 可被访问 | 可被访问 | 可被访问 | ||
private | 可被访问 |
Java类之文件类
文件类,指在一个源代码文件中,在一个公共类之外存在的类。例如:
public class SomeClass { ... } class FileClass1 {//文件类 ... } ... class FileClassN {//文件类 ... }
JDK规定一个源文件中只允许有一个公共类,所以文件类不可以定义为public,事实上,JDK只允许文件类具有包访问权,否则会产生语法错误。文件类一般对该文件中public类提供支持,或者是从属于这个public类。文件类和public类一般具有组合关系,即,存在的是“has a”关系(继承,是类之间存在“is a”关系)。
Java类之内部类
内部类指在一个类中包含的另一个类,例如:
public class OuterClass { ... class InnerClass1 {//内部类 //可以访问所有OuterClass的成员 ... } ... class InnerClassN {//内部类 //可以访问所有OuterClass的成员 ... } ... }
一个外部类OuterClass可以有多个内部类。内部类可以有他自己的成员;在内部类中可以访问外部类OuterClass中的所有成员,是一种隐含的继承方式。内部类一般应用在专门处理其外部类延伸性的特殊运算及操作,例如,专门用来给外部类提供排序、搜索、线程等即时处理的代码。
创建内部类的两种方式: OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass(); OuterClass.InnerClass inner = new OuterClass().new InnerClass();
与内部类相似,静态内部类指在一个类的内部包含有另外一个静态类,例如:
public class OuterClass { ... static class StaticInnerClass1 {//内部静态类 //只可以访问外部类的静态成员 ... } ... static class StaticInnerClassN {//内部静态类 //只可以访问外部类的静态成员 ... } ... }
如同不用创建对象就可调用静态方法一样,调用静态内部类的方法用如下方式:
OuterClass。StaticInnerClass.innerMethod();
Java类之本地类
本地类指在一个方法中包含的类,也称作本地内部类,例如:
public class SomeClass { ... void method() { ... class LocalClass { //可以访问所有外部类的成员 localMethod() { ... } } ... } ... }
本地类不允许是静态的,也不可以有静态成员。本地类如同本地变量一样,只能在其所在的方法内部使用。本地类可以访问外部类的所有成员,因而也是一种特殊形式的继承。如果一个类的作用域和功能仅存于某个方法中,则应选择本地类。
Java类之匿名类
匿名类,也称匿名内部类,指类的声明和创建对象在一个语句中完成。匿名类是Java语言的独创,实际上是一个无名的本地类。匿名类经常应用在对GUI组件,如按钮、菜单等的事件处理中:
... AddButton = new JButton("Add"); AddButton.addActionListener(new ActionListener() { //匿名类进行AddButton按钮事件处理 public void actionPerformed() { Add();//调用方法进行相加运算 } }); ...
PS. 内部类和本地类可以再次嵌套,静态内部类和匿名类不可再次嵌套。