可以将一个类的定义放在另一个类的定义内部,这就是内部类。
内部类是一种非常有用的特性,它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性。
内部类可以访问外部类的所有成员,内部类持有外部类的引用。
10.3 .this 和 .new
如果你在内部类需要对外部类引用, 可以使用 外部类的名字.this
。其在编译期就被知晓并受到检查,因此没有任何性能开销。
必须使用外部类对象来创建内部类对象(静态内部类除外)。外部类对象.new 内部类名称()
。
10.4 内部类与向上转型
private内部类给类的设计者提供了一种途径,通过这种方式可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节。【个人感觉:这小节说的是private的内部类,在外部类中提供创建内部类对象的方法,因为是private修饰的,所以其他类没有访问权限。隐藏实现细节。】
10.5 在方法和作用域内的内部类
为什么这么做呢?
1. 你实现了某类型的接口,于是可以创建并返回对其的引用。
2. 你需要解决一个复杂的问题,想创建一个类来辅助你的解决方案,但是又不希望这个类是公共可用的。
10.6 匿名内部类
没有名字的内部类。
10.7 嵌套类
嵌套类其实就是指静态内部类。
嵌套类不持有外部类的引用。
不能从嵌套类的对象中访问非静态的外部类的对象。
创建内部类对象:new 外部类名称.内部类名称();
10.7.1 接口的内部类
其实就是把内部类定义为接口的成员变量。
public interface TestInner {
void eat();
class Test implements Contents{
@Override
public int value() {
return 0;
}
}
}
一个内部类被嵌套多少层并不重要,它能够透明的访问所有它所嵌入的外围类的所有成员。