黑马程序员技术交流社区

标题: 内部类的理解! [打印本页]

作者: 洋葱头头    时间: 2015-11-20 19:05
标题: 内部类的理解!
本帖最后由 洋葱头头 于 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是一个接口,不能作为参数传递,所以我们使用到了匿名内部类,来实现里面的抽象方法.



作者: Aaron_wang    时间: 2015-11-20 22:11
正准备复习下这部分,学习了,现在在java基础班,几乎用不到内部类,源码里却有很多,还不太明白内部类的应用场景
作者: 洋葱头头    时间: 2015-11-21 08:56
Aaron_wang 发表于 2015-11-20 22:11
正准备复习下这部分,学习了,现在在java基础班,几乎用不到内部类,源码里却有很多,还不太明白内部类的应 ...

在android里会大量使用  所以学android的同学还是要掌握一下,
作者: 萧未然    时间: 2015-11-21 09:18
版主大爱,复习了
作者: 洋葱头头    时间: 2015-11-21 11:57
萧未然 发表于 2015-11-21 09:18
版主大爱,复习了

{:3_64:}{:3_64:}
作者: 洛荣神川    时间: 2015-11-21 12:58
很详细,清晰易懂
作者: xiao15779706    时间: 2015-11-21 13:11
太赞了   好全面 正好复习一下

作者: z13561291    时间: 2015-11-21 14:57
刚好对匿名内部类不是很了解,谢谢分享
作者: z940505    时间: 2015-11-21 21:29
虽然知道你是在水,但我还是无耻的回帖了
作者: gih146    时间: 2015-11-21 21:30
学习了,这方面确实不太好理解
作者: 狮子王    时间: 2015-11-21 21:34
艾玛  收藏了!
作者: 邸永明    时间: 2015-11-21 21:35
看懂内部类,对看源码还是挺有帮助的,学习了

作者: duluhuang    时间: 2015-12-11 11:59
怎样才能快速获取技术分啊,我好急啊,求指教
作者: 洋葱头头    时间: 2015-12-11 12:11
z940505 发表于 2015-11-21 21:29
虽然知道你是在水,但我还是无耻的回帖了

靠 我打了半天的帖子{:3_47:}
作者: bulala    时间: 2015-12-11 15:10
学习了

作者: DaYe    时间: 2015-12-11 19:10
很好很清晰明了
作者: zhangdazhi186    时间: 2015-12-11 19:47
路过 学习
作者: 马赛    时间: 2015-12-11 22:48
在个知识点一直没弄懂
作者: 星晴。    时间: 2015-12-11 23:28
好贴必顶啊!
作者: Mr.zhao    时间: 2015-12-11 23:39
刚看过,又浏览了一次,感觉每次看视频都会理解,但是,让自己举例啥的复述啥的就是不行,
作者: 水瓶座    时间: 2015-12-11 23:44
好东西!谢谢分享!
作者: zcbcba123    时间: 2015-12-12 00:28
你有没有遇到过内部类里实现的是自定义的接口?然而这个自定义接口是要传入参数的,那么请问这个参数我们该怎么传入呢?
我比较拙,看了好几个小时那个人的代码才弄明白
作者: 郝志学    时间: 2016-2-15 09:17
洋葱头头 发表于 2015-12-11 12:11
靠 我打了半天的帖子

6666666666666666666666
作者: PeterPang    时间: 2016-2-16 22:35
学习了 谢谢 顶!
作者: 糊涂真好    时间: 2016-2-18 02:38
不错,通过你的讲解,我又明白了点
作者: Q的感动    时间: 2016-3-12 15:55
复习了一边内部类
作者: yph19950519    时间: 2016-3-12 20:33
讲得很好啊!!
作者: 天赐潇潇    时间: 2016-3-12 21:04
我想说正好昨天学完不太了解  收藏了   
作者: xiening123    时间: 2016-3-12 23:54
果断收藏
作者: lijiy09    时间: 2016-3-13 00:16
收藏了,谢楼主总结!
作者: duanbozhi    时间: 2016-4-11 13:30
最近在复习,看了很有启发.
作者: wufengqiao    时间: 2016-5-2 21:13
赞一下!!
作者: yuanzhen    时间: 2016-5-2 21:18
谢谢,好东西
作者: nannanziyu    时间: 2016-5-2 23:25
学习一下;;;
作者: 水月灬清影    时间: 2016-8-15 21:49
感谢!总结的很好,又加深了一遍理解!
作者: li--yong    时间: 2016-8-15 23:19
好多啊,比较齐全了
作者: Frankle    时间: 2016-8-17 21:40
正需要这方面的知识呢,skill get
作者: x55555lg    时间: 2016-8-17 22:14
整理的很详细,感谢分享
作者: 开心的流泪者    时间: 2016-8-17 23:11
内部类  总结的很好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2