内部类
2018-04-09 本文已影响0人
0x70e8
内部类的语法规则
- 内部类可以访问创建它的外围类的所有数据域
- 内部类的对象总有一个隐式引用,指向创建它的外部类对象。(静态内部类没有,只有内部类可以声明为static)
- 静态内部类没有对生成他的外围类对象的引用外(不需要引用时,仅仅为了隐藏类考虑使用静态内部类),静态内部类可以定义静态方法
- 只有内部类可以是private的,外围类只能是public或者default(包访问权限)
- 内部类中声明的所有静态域必须是final的
- 内部类不能有static 方法
- 局部类不能使用public或private声明类
使用内部类的技巧
双括号初始化(基于内部类语法):
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<String>() {
{
add("hello");
add("world");
}
};
list.forEach(System.out::println);
}
}
实际上是使用的匿名内部类:
class Main$1 extends ArrayList
{
Main$1()
{
add("hello");
add("world");
}
}