------- android培训、java培训、期待与您交流! ----------
1.概念
2.前提
- 内部类必须是继承一个类或者实现接口。
- 内部类可以直接继承 其他外部类,继承直接外部类没意义。
3.格式
- 匿名内部类的格式: new 父类或者接口()
- 其实匿名内部类就是一个匿名子类对象,而且这个类有点胖,可以理解为带内容的对象。
4.定义
-
一般的成员内部类步骤:
-
- 1.内部类继承了一个类(可以是抽象类和接口)。//这个是为了简化为匿名类而增加的,一般可以不写。
- 2.复写内部类中的方法
- 3.外部类创建内部类的对象
- 4.调用这个对象的方法。
- abstract class AbsDemo //内部类所继承的外部类,也可以是接口。
- {
- }
- class outer
- {
- int x = 3;//直接外部类的成员变量
- class Inner extends AbsDemo
- {
- }
- public void function()
- {
- new Inner().show();//建立内部类对象,调用内部类的方法。
- }
- }
- (二)简化后的匿名内部类
- 简化为匿名内部类思路:
- 首先考虑因为是匿名的,就没法创建内部类对象。该内部类有一个父类,可以new父类,父类是一个抽象类有抽象方法,不能直接创建对象。创建抽象类对象就是实现抽象方法,步骤: new父类(抽象类或方法都可以), 覆盖或 实现里面的抽象方法。
-
匿名内部类步骤:
- 这个是最终的匿名内部类, 这是一个对象,它是AbsDemo的子类对象。
- 1.new Inner().show(); //这个是调用内部类对象的show方法。
- 2.new AbsDemo().show();//由于 Inner匿名,所以用父类代替。这个对象还少show方法。
- 3. new AbsDemo()
- {
-
}//从这往上是一个对象体,这个对象是AbsDemo的匿名子类对象。
-
.show();//这个是对象调用show方法。
- 匿名内部类示例:
- abstract class AbsDemo //内部类所继承的外部类,也可以是接口。
- {
- }
- class outer
- {
- int x = 3;//直接外部类的成员变量
- public void function()
- {
- new AbsDemo()//这是一个对象,它是AbsDemo的子类对象。
- {
- }
- }
- }
5.注意
- 父类方法过多(大于两个)时,不允许使用匿名内部类,实现没有问题,但是太繁琐。
- 匿名类的存在是为了简化书写、覆盖父类方法, 一般只有匿名子类对象结尾调用一次方法。像调用第二个方法,必须新建第二个匿名类。
- 多态无法使匿名类调用自己的新加方法,因为父类无法调用子类特有方法。
- 什么时候使用匿名内部类呢?
- 当需要传递一个对象参数,这个参数是接口或抽象类对象并且这个接口或抽象类的方法不大于两个。
- 这个参数就可以写成匿名内部类。格式如下:
- 方法(new 接口()
- {
- });//注意这里,大括号是接口子类对象体的,小括号是参数的,分号是语句结束。
- 有一种特殊的情况:能不能不继承任何抽象类、实现任何接口就能实现匿名内部类呢?答案是可以的,因为我们有上帝Object.
6.面试题
(一)
- 存在一个inter接口、一个主函数,补足Test。
- interface Inter
- {
- }
- class Test
- {
- //补足代码。通过匿名内部类。
- }
-
- class InnerClassTest
- {
- public s v main(String[] args)
- {
- Test.function().method();
- }
- }
- 分析。
- 1.这个问题的关键在 Test.function().method();
- 首先Test. function()可以看出:Test类中function是静态的。
- 再就是.method()能看出: Test.function()的运算结果是一个Inner对象,原因是只有Inner对象才能调用method方法。
- 分析完毕。
- 2.代码如下:
- static Inner function()
- {
- }
(二)
7.总结:
- 匿名内部类就是直接new一个接口或抽象类。当然,这个类是它们的子类,叫做匿名内部子类。接口或抽象类无法直接创建对象,只需要把它们的方法实现即可。简单说:直接new接口(匿名类)对象,后面补足方法。
分享到:
相关推荐
黑马QT讲义,适合QT入门,使用,教程很比较基础,新手可以看看,另外视频链接在哔哩哔哩中。
黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心
黑马程序员-SpringCloud-学习笔记01-认识微服务
黑马程序员 - Java基础教学 - 05 - 面向对象(1).doc
黑马程序员-SpringCloud-学习笔记-02-微服务拆分及远程调用
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490901
黑马程序员 - 毕向东 - Java基础教学 - 第02天 个人观看视频总结文档
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、...
黑马程序员-java32期培训视频(基础+就业)黑马程序员-java32期培训视频(基础+就业)
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490903
黑马程序员 - Java基础教学 - 04 - 数组、进制转换、二维数组
黑马程序员-梅兰商城项目实战,包含图片素材和编写源码。
黑马程序员 - 毕向东 - Java基础教学 - 第01天 个人观看视频总结文档
黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc
C++黑马程序员-演讲比赛流程管理系统记录
黑马程序员 - Java基础教学 - 03 - 变量的作用域、for循环、break、continue、内存结构
行时所需要的基本条件和许多 Java 基础类,例如,IO 类、GUI 控件类、网络类等。JRE 是提供给 普通用户使用的,如果你只想运行别人开发好的 Java 程序,那么,你的计算机上必须且只需安装 JRE。 JDK(Java ...
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490905
黑马程序员 - Java基础教学 - 06 - 面向对象(2) - 关于静态static的那些事.doc
黑马程序员--毕向东全套Java视屏,讲解的相当全面,各位如果需要,尽快下载哦! 另外如果视频链接存在打不开的问题,请留言,必定及时更新链接。