内部类

来源:互联网 发布:淘宝客服删除聊天记录 编辑:程序博客网 时间:2024/06/06 06:30
---------------------------------------------------------------------------------------------------------------------------------------------------
内部类种类大致如下

*非静态内部类(成员内部类)
*静态内部类(嵌套内部类)
*局部内部类(定义在方法内或者作用域内的类,好似局部变量,所以不能有访问控制符和static等修饰)
*匿名内部类(没有名字,仅使用一次,new个对象即扔掉类的定义)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
为什么非静态内部类持有外部类引用,静态内部类不持有外部引用?
此回答作参考使用)
***这个问题非常简单,就像 static的方法只能调用static的东西,非static可以调用非static和static的一样。static→ 针对class, 非static->针对 对象,我是这么简单理解的。***
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
成员内部类

1.成员内部类可以无条件的访问外部内的所有成员(包括private、static等)
2.外部内如果要访问内部类的成员,必须先创建一个成员内部类的对象,再通过这个对象引用来访问。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
局部内部类

1.局部内部类和成员内部类的区别在于,前者作用域仅局限于方法内。
2.局部内部类有一个优势,即对外部世界可以完全地隐藏起来。
3.局部内部类不能用public、protected、private以及static修饰符的
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
匿名内部类

应用的业务场景:
1.只用到类的一个实例;
2.类在定义后马上用到;
3.类非常小(比如类代码在10行以下)。

匿名内部类的类型可以是如下几种方式:
*接口匿名内部类
*抽象类匿名内部类
*类匿名内部类

1.由于匿名内部类没有名称,因此在创建匿名内部类对象时,new运算符后是超类或接口的名称,其后面的{}内部为匿名类的定义。
2.匿名类对象的创建与匿名内部类的定义是在一起完成的。



注意:方法内的回调对象(匿名内部类的实例)也是持有外部类引用的
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
静态内部类

1.当内部类不需要访问外围类对象的时候,应该使用静态内部类。
2.静态内部类,只能访问外部类的静态成员。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(来自程序员chatbook)



原创粉丝点击