Java 内部类
2018-01-31 本文已影响0人
撑起头顶的天
内部类
内部类.png内部类
定义:将一个类定义置入另一个类定义中
用处:利用它可对那些逻辑上相互联系的类进行分组,并可控制一个类在另一个类中的“可见性”
public class Parcel1 {
class Contents {
private int i = 11;
public int value() { return i; }
}
class Destination {
private String label;
Destination(String whereTo) {
label = whereTo;
}
String readLabel() { return label; }
}
// Using inner classes looks just like
// using any other class, within Parcel1:
public void ship(String dest) {
Contents c = new Contents();
System.out.println(c.value());
Destination d = new Destination(dest);
System.out.println(d.readLabel());
}
public static void main(String[] args) {
Parcel1 p = new Parcel1();
p.ship("Tasmania");
}
}
利用private内部类,类设计人 员可完全禁止其他人依赖类型编码,并可将具体的实施细节完全隐藏起来。
从客户程序员的角度 来看,一个接口的范围没有意义的,因为他们不能访问不属于公共接口类的任何额外方法
普通(非内部)类不可设为private或protected——只允许public或者default。
内部类可以访问封装类的成员,这是如何实现的呢?
内部类必须拥有对封装类的特定对象的一个引用,而封装类的作用就是创建这个内部类。随后,当我们引用封装类的一个成员时,就利用那个(隐藏)的引用来选择那个成员。幸运的是,编译器会帮助我们实现所有这些细节。但我们现在也可以理解内部类的一个对象只能与封装类的一个对象联合创建。在这个创建过程中,要求对封装类对象的引用进行初始化。若不能访问那个引用,编译器就会报错。进行所有这些操作的时候大多数时候都不要求程序员的任何介入。
静态内部类
static 内部类意味着:
(1) 为创建一个static内部类的对象,我们不需要一个外部类对象。
(2) 不能从static内部类的一个对象中访问一个外部类对象。