最近一直专注于android的学习,发现内部类实在是一个很重要的知识点,而经过了漫长的javaEE学习后,javaSE似乎有点遗忘了,实在惭愧,于是利用今天剩下一小时将其总结如下:
一、普通内部类
1.在内部类中,内部类对象都保存有一个对外部类对象的引用,一般用 outerclass.this来表示。
2.内部类可以访问外部类的所有成员,但是外部类不能访问内部类成员,内部类成员只有在内部类的范围内可知
3.主要好处:高内聚,低耦合
4.何时用?当一个类和另一个类的关系是一个类需要被另一个类全部知道,而并不需要知道另一个类时可以使用内部类。
5.内部类实例化主要是通过外部类的对象或者对象的引用来访问。内部类实例化的的三种方式
1)通过外部类的非静态方法实例化内部类
2)通过外部类的静态main方法实例化内部类
3)在内部类中通过this表示内部类的实例
二、局部内部类
特点与常见的内部类差不多,只是放在函数或者for循环中,其主要区别是在局部内部类中,如果要访问外部类的局部变量,必须用final修饰,因为方法的生命周期只是在调用时存在,方法调用完了就结束了,而内部类实例化后并不随外部类成员方法的消失而消失。其次实例化需要先实例化外部类。在内部类中不能定义静态的属性。
三、匿名内部类
前提:内部类可以继承外部类,或者可以实现外部接口。
匿名内部类没有构造函数。注意当其继承一个有参数的构造函数的父类时,创建时一定要带参数,并在实现的过程中使用super关键字调用相应的内容。
语法格式
New [类名或接口]
{需要补足的内容即需要覆盖的内容或者新的方法}.方法名;
何时用?
通常,看到接口型参数,并该接口中的方法不超过三个,那么这时可以通过匿名内部类的形式,进行参数传递
例:abstract class Test
{
abstract void method();
}
class Outer
{
static private int x=4;
public static void main(String[] args)
{
new Test()
{
void method()
{
System.out.println(x);
}
}.method();