有缘人啊。昨天花了半天时间复习了内部类,感觉比初次学习时的内容多好多,好多碎知识点,先将复习笔记写出来。主要是特性总结。共同学习
内部类:
把一个类放在另一个类的内部定义即可。此处的“类内部”包括类中的任何位置,甚至在方法中也可以定义内部类(方法里定义的内部类被称为局部内部类)。
内部类作用:
1.更好的封装,隐藏在外部类之内,不允许同一个包中其他类的访问;
2.内部类成员可以直接访问外部类的私有数据,但外部类不能访问内部类的实现细节。
3.匿名内部类适合用于创建那些仅需要一次使用的类。
大部分时候,内部类都被作为成员内部类定义,而不是作为局部内部类。成员内部类是一种与属性、方法、构造器和初始化块相似的类成员;局部内部类和匿名内部类则不是类成员。局部内部类和匿名内部类不是类成员。
成员内部类分为两种:静态内部类和非静态内部类。使用static修饰的成员内部类是静态内部类,没有‘使用static修饰的成员内部类是非静态内部类。
非静态内部类:
非静态内部类里不能有静态方法、静态属性、静态初始化块。
静态内部类:
静态内部类可以包含静态成员,也可以包含非静态成员。根据静态成员不能访问非静态成员的规则,所以静态内部类不能访问外部类的实例成员,只能访问外部类的类成员,即只能访问外部类的静态成员。外部类依然不能直接访问静态内部类的成员,但可以使用静态内部类的类名作为调用者来访问静态内部类的类成员,也可使用静态内部类的对象作为调用者来访问静态内部类的实例成员。
外部类和内部类区别:
外部类的上一级程序单元是包,所以它只有2个作用域:同一个包和任何位置。因此只需两种访问权限:包访问权限和公开访问权限。正好对应省略访问控制符和public访问控制符。而内部类的上一级程序单元是外部类,它就具有四个作用域:同一个类、同一个包、父子类和任何位置,因此可以使用四种访问控制权限。
局部内部类:
如果把一个内部类放在方法里定义,则这个内部类就是一个局部内部类,局部内部类仅在该方法里有效。
对于局部成员而言,不管是局部变量,还是局部内部类,它们的上一级程序单元是方法,而不是类,使用static修饰它们没有任何意义。因此,所有局部成员都不能使用static修饰。不仅如此,因为局部成员的作用域是所在方法,其他程序单元永远也不可能访问另一个方法中的局部成员,所以所有局部成员都不能使用访问控制符修饰。
匿名内部类:
匿名内部类适合创建那种只需要一次使用的类。
特点:
不能重复使用:
不能是抽象类;
不能定义构造器。
java8中出现了lambda表达式彻底简化了匿名内部类的繁琐写法,是一个应用趋势。 |