难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
提示
本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
1.局部内部类
在任何作用域中定义的类都称之为局部内部类。
演示:
局部内部类。
代码:
没有学习过的同学或者是不太清楚局部内部类的同学也别急,可以点击下面局部内部类学习资料来进行学习。
附:局部内部类学习资料
全栈2019”Java第九十五章:方法中可以定义静态局部内部类吗?
全栈2019”Java第九十七章:在方法中访问局部内部类成员详解
全栈2019”Java第九十八章:局部内部类访问作用域成员详解
“全栈2019”Java第一百章:局部内部类可以实现接口吗?
“全栈2019”Java第一百零一章:局部内部类覆盖作用域内成员详解
“全栈2019”Java第一百零二章:哪些作用域可以声明局部内部类?
2.匿名内部类
匿名内部类可以使我们代码更简洁。能够使我们同时声明和实例化一个类。匿名内部类就像局部内部类,除了没有名称。如果你只需要使用局部内部类一次,请使用匿名内部类。
接下来,我们通过一个例子来感受一下匿名内部类。
3.声明匿名内部类
演示:
声明匿名内部类。
代码:
Main类:
结果:
从运行结果来看,程序本身没有问题。我们来分析一下此程序。
首先,我们在Main类中定义了一个嵌套接口:
该接口里面有一个say()抽象方法。
接着我们又定义了一个静态方法,该静态方法供main()方法通过类名直接调用:
我们再来看看此静态方法里面又定义了一些什么:
首先,我们看到的是一个局部内部类,它实现了嵌套接口。紧接着,它被创建对象:
我们声明一个局部内部类和创建一个局部内部类对象为的就是和下面即将声明的匿名内部类做对比。
下面马上就声明了两个匿名内部类:
注意,此处是声明匿名内部类的同时创建了匿名内部类对象。
接下来就是对三个对象分别调用say()方法:
执行结果:
至此,程序执行完毕!
4.匿名内部类的语法
匿名内部类是表达式。匿名内部类表达式的语法类似于构造函数的调用,除了代码块中包含类定义。
cat对象的实例化:
匿名内部类表达式包含以下内容:
- new关键字
- 要实现的接口的名称或要扩展的类。 在此示例中,匿名内部类正在实现接口Speakable。
- 包含构造函数参数的圆括号,就像普通的类实例创建表达式一样。 注意:实现接口时,没有构造函数,因此使用一对空括号,如本例所示。
- 类体。你可以在类体中声明方法,但是你不能在外界使用,可以在类体中使用。
因为匿名内部类定义是表达式,所以它必须是语句的一部分。 在此示例中,匿名内部类表达式是实例化cat对象的语句的一部分。
总结
- 匿名内部类可以使我们代码更简洁。能够使我们同时声明和实例化一个类。匿名内部类就像局部内部类,除了没有名称。如果你只需要使用局部内部类一次,请使用匿名内部类。
- 匿名内部类是表达式。匿名内部类表达式的语法类似于构造函数的调用,除了代码块中包含类定义。
至此,Java中匿名内部类相关内容讲解先告一段落,更多内容请持续关注。
附:类学习资料
全栈2019”Java第三十九章:构造函数、构造方法、构造器
全栈2019”Java第五十一章:继承与final关键字详解
附:抽象类学习资料
全栈2019”Java第五十八章:多态中方法返回类型可以是子类类型
附:接口学习资料
附:内部类学习资料
全栈2019”Java第七十一章:外部类访问静态内部类成员详解
全栈2019”Java第七十三章:外部类里多个静态非静态内部类详解
全栈2019”Java第七十四章:内部类与静态内部类相互嵌套
全栈2019”Java第七十六章:静态、非静态内部类访问权限
全栈2019”Java第七十七章:抽象内部类与抽象静态内部类详解
全栈2019”Java第八十章:外部类是否能实现本类中的接口?
全栈2019”Java第八十一章:外部类能否访问嵌套接口里的成员?
全栈2019”Java第八十二章:嵌套接口能否访问外部类中的成员?
全栈2019”Java第八十七章:类中嵌套接口的应用场景(拔高题)
全栈2019”Java第九十章:内部类可以向上或向下转型吗?
全栈2019”Java第九十二章:外部类与内部类成员覆盖详解
全栈2019”Java第九十三章:内部类应用场景(迭代器设计模式)
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
“全栈2019”Java第一百零二章:哪些作用域可以声明局部内部类?
下一章
“全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!