近期再仔细看了下《java核心编程》,对之前有点模糊的内部类、局部内部类、匿名内部类进行了研究。
内部类概念:内部类是定义在另外一个类中的类,使用内部类的好处:
1 内部类可以访问该类定义所在区域的数据。
2 内部类可以对同一个包内的其他类隐藏起来。
3 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较合适。
内部类的对象总有一个隐式引用,它指向创建它的外部类对象。
局部内部类,当某个类只在某个方法中被创建使用,可以在一个方法中定义局部类。这个类就是局部内部类。
它的作用域被限定在声明这个局部类的块中。局部内部类不仅能够访问它们的外部类,还可以访问局部变量,
不过局部变量必须声明为final。因为局部变量可能会在局部内部类运行前释放,所以局部变量必须是不可以改变的,在局部内部类创建时,会根据当下局部变量的值在局部内部类的内部保存该变量的一个副本。
匿名内部类,假如只创建这个局部内部类的一个对象,就不必要对这个类取名。通常的语法格式是:
new SupperType(construction parameters)
{
inner class methos and data
}
没有类名,构造器又必须和类名相同,所以匿名类不能有构造器,但可以使用超类的构造器,可以将构造器参数传递给超类构造器。内部类实现接口的时候,不能有任何构造函数。
匿名类部类的例子,
Person anonyOne = new Person("no nmae")
{
public DoSomeThing()
{
}
}
构造参数的闭圆括号跟一个开花括号,正在定义的就是匿名内部类。