1、创建内部类
内部类具有代码隐藏的功能
从外部类的非静态方法之外的任何位置创建某个内部类的对象,必须OutClassName.InnerClassName
2、链接到外部类
- 内部类拥有其外围类的所有元素的访问权。当外部类创建了一个内部类对象时,此内部类对象就会秘密捕获指向那个外部类的引用。
- 创建内部类时,内部类对象会捕获一个指向那个外围类对象的引用。
- 内部类对象只有在与其外围类的对象关联时才能创建(static内部类除外)
3、.this 和 .new
.this 生成对外围对象的引用,外部类的名字紧跟.this
public Outer get(){
return Outer.this;
}
.new 用于创建内部类对象,当生成内部类对象时,必须有外部类的实例使用外部类实例名.new 内部类名的方式创建。
out.new Inner();
4、内部类与向上转型
内部类可以用于隐藏实现细节,将接口的实现细节实现于private内部类。
5、方法和作用域中的内部类
在方法或者作用域中定义的内部类,限制了内部类的使用范围。
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
6、匿名内部类
- 创建一个继承一个基类或接口的匿名类对象。
- 如果在匿名类中使用一个外部定义的对象,必须是final的。
- 匿名类没有命名构造器,并且只有一个,实例化初始化可以达到构造器效果。
- 匿名类只能扩展一个类或者接口。
7、嵌套类
- 创建嵌套类对象不需要其外围类对象。
- 不能从嵌套类的对象中访问非静态的外围类对象。