本帖最后由 洋葱头头 于 2015-11-20 19:05 编辑
首先,内部类的定义,顾名思义 就是在一个类里,在定义一个类就是内部类如图:class In 就是一个内部类,很明显他存在于class Out的中
所以你可以理解为有内部类 就有外部类
那么内部类的访问特点:
1.内部类可以直接访问外部类的成员,包括私有。
2.外部类要访问内部类的成员,必须创建对象。如图
内部类的分类:按照内部类存在于外部类的位置来分类
1.存在于外部类中 成员位置(方法外) -- 成员内部类
2.存在于外部类局部位置-- 局部内部类
一,成员内部类
存在于外部类中成员位置的类成为 成员内部类如上图1,class In就是成员内部类
?外界如何访问class In呢
格式: 部类名.内部类名 对象名 = 外部类对象.内部类对象;
如图:
但是 内部类之所以定义为内部类 就是不想让外界直接的访问,所以一般加上private修饰,由外部类提供方法访问:
另外,内部类还可以被static修饰,而且仅仅只有内部类可以被static修饰,被static修饰的内部类只可以访问外部类静态成员
二,局部内部类
存在于外部类局部位置(可以理解为方法中)
局部内部类和成员内部类一样 ,也可以直接访问外部类成员
值得一提的是,使用局部内部类访问外部类局部变量时,需要加final关键字,这也是一道面试题
下面,学习android的同学会经常用到的匿名内部类,真的是非常常用
匿名内部类
在使用匿名内部类时,要记住以下几个原则:
匿名内部类不能有构造方法.
匿名内部类不能定义任何静态成员,方法和类
匿名内部类不能是public,protected,private,static.
只能创建匿名内部类的一个实例
一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类
还有,因为匿名内部类是局部内部类 所以对局部内部类的所有限制都对其生肖
匿名内部类:
因为匿名内部类是一个子类实例 所以也可以看成
这是接口通过匿名内部类实现的实例化,个人理解为接口的多态性
android中匿名内部类的简单应用
如代码所示,给listView设置条目点击事件,因为OnItemClickListener是一个接口,不能作为参数传递,所以我们使用到了匿名内部类,来实现里面的抽象方法.
|
|