Java4Android第11课:内部类和匿名内部类
2016-06-01 16:18
375 查看
内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类
如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)
显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类
而心脏又在人体当中,正如同是内部类在外部内当中
运行结果:12
从上面的例子不难看出,内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?
因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点
如同心脏可以直接访问身体的血液,而不是通过医生来抽血
程序编译过后会产生两个.class文件,分别是Out.class和Out$In.class
其中$代表了上面程序中Out.In中的那个 .
Out.In in = new Out().new In()可以用来生成内部类的对象,这种方法存在两个小知识点需要注意
1.开头的Out是为了标明需要生成的内部类对象在哪个外部类当中
2.必须先有外部类的对象才能生成内部类的对象,因为内部类的作用就是为了访问外部类中的成员变量
运行结果:12
可以看到,如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性
其次,因为内部类被静态化,因此Out.In可以当做一个整体看,可以直接new 出内部类的对象(通过类名访问static,生不生成外部类对象都没关系)
运行结果:eat something
Person是一个接口,不能生成对象。所以new Person()后面必须跟着Person接口的实现类,也就是{......}。这个类没有名字,并且是在Demo类内部实现的,所以称它为匿名内部类。
由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现
如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)
显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类
而心脏又在人体当中,正如同是内部类在外部内当中
实例1:内部类的基本结构
从上面的例子不难看出,内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?
因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点
如同心脏可以直接访问身体的血液,而不是通过医生来抽血
程序编译过后会产生两个.class文件,分别是Out.class和Out$In.class
其中$代表了上面程序中Out.In中的那个 .
Out.In in = new Out().new In()可以用来生成内部类的对象,这种方法存在两个小知识点需要注意
1.开头的Out是为了标明需要生成的内部类对象在哪个外部类当中
2.必须先有外部类的对象才能生成内部类的对象,因为内部类的作用就是为了访问外部类中的成员变量
实例2:静态内部类
可以看到,如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性
其次,因为内部类被静态化,因此Out.In可以当做一个整体看,可以直接new 出内部类的对象(通过类名访问static,生不生成外部类对象都没关系)
实例3:在接口上使用匿名内部类
Person是一个接口,不能生成对象。所以new Person()后面必须跟着Person接口的实现类,也就是{......}。这个类没有名字,并且是在Demo类内部实现的,所以称它为匿名内部类。
由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现
相关文章推荐
- Android 应用签名工具----酷传
- android 跨进程通讯详解
- Android布局技巧之使用ViewStub
- android 拍照,存储在指定目录下核心代码
- 安卓折叠视图
- 不常用的adb命令(Android编程实战)
- Android 系统状态栏沉浸式/透明化完整解决方案
- Android梳理 前言
- 基于鸿洋博客自定于View实现的android音量调节控件
- Android布局技巧之创建高效布局
- Android 探究 LayoutInflater setFactory
- Android图片压缩(质量压缩和尺寸压缩)
- android利用shape画虚线
- 修改android-自定义控件-悬浮控件-仿360手机助手应用详情页
- android内存分析 outOfMemoryError错误定位及分析策略(非显示图片造成)
- Android Studio目录结构
- Android布局技巧之合并布局
- Android自定义弹窗——右上角悬浮关闭
- [置顶] Android开发之高亮引导
- android6.0指纹开发