A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 洋葱头头 金牌黑马   /  2015-11-20 19:05  /  3053 人查看  /  39 人回复  /   5 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 洋葱头头 于 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是一个接口,不能作为参数传递,所以我们使用到了匿名内部类,来实现里面的抽象方法.


39 个回复

正序浏览
内部类  总结的很好
回复 使用道具 举报
x55555lg 来自手机 中级黑马 2016-8-17 22:14:33
38#
整理的很详细,感谢分享
回复 使用道具 举报
正需要这方面的知识呢,skill get
回复 使用道具 举报
好多啊,比较齐全了
回复 使用道具 举报
感谢!总结的很好,又加深了一遍理解!
回复 使用道具 举报
学习一下;;;
回复 使用道具 举报
谢谢,好东西
回复 使用道具 举报
赞一下!!
回复 使用道具 举报
最近在复习,看了很有启发.
回复 使用道具 举报
收藏了,谢楼主总结!
回复 使用道具 举报
果断收藏
回复 使用道具 举报
我想说正好昨天学完不太了解  收藏了   
回复 使用道具 举报
讲得很好啊!!
回复 使用道具 举报
复习了一边内部类
回复 使用道具 举报
不错,通过你的讲解,我又明白了点
回复 使用道具 举报
学习了 谢谢 顶!
回复 使用道具 举报
洋葱头头 发表于 2015-12-11 12:11
靠 我打了半天的帖子

6666666666666666666666
回复 使用道具 举报
你有没有遇到过内部类里实现的是自定义的接口?然而这个自定义接口是要传入参数的,那么请问这个参数我们该怎么传入呢?
我比较拙,看了好几个小时那个人的代码才弄明白
回复 使用道具 举报
水瓶座 来自手机 中级黑马 2015-12-11 23:44:55
21#
好东西!谢谢分享!
回复 使用道具 举报
刚看过,又浏览了一次,感觉每次看视频都会理解,但是,让自己举例啥的复述啥的就是不行,
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马