Java内部类有哪些使用场景?使用时有哪些坑?

createh56个月前 (12-16)技术教程61

什么是内部类?

内部类,顾名思义,就是在一个类内部创建的类。

那么,

  1. 内部类有哪些使用场景?
  2. 使用内部类时有哪些坑?

内部类的坑

在内部类中的方法内部,调用外围类类名.this方法会返回当前内部类所连接的外围类对象的引用,如下图:

这有个很合理的解释:内部类如果使用了外部环境的状态,那么,内部类加上创建它的外部环境,就叫做闭包

什么时候会用到内部类?

隐藏某些实现、多继承、单元测试、闭包问题(即如果一个类继承了某个父类,这个类还想实现一个接口,但是父类和这接口有些方法或属性有冲突,想把父类和接口的功能都保留下来,那么,就可以用内部类来配合,用接口加内部类来实现闭包)

继承内部类时有哪些坑?

继承自内部类时,使用默认的构造器会报错,因为内部类会默认的获得指向其外部类对象的引用,所以继承内部类时应该在构造器参数中传递一个其外部类对象的引用(编译器要求你一定要这样做),然后在构造器中使用该外部类对象引用的super方法(该super方法调用的是这个外部类对象的内部类的构造方法)。如果父类和接口都有一个方法,他们的方法签名相同,那么子类中的这个方法,既是父类方法的重写又是接口方法的实现。如下面2个图,


内部类的构造器和其他方法都会默认传递一个外围类对象做参数,如:

去掉这个内部类的无参构造器时,则用反射获取不到其构造器(即,不显式的定义内部类构造器,使用反射就获取不到内部类的构造器【有参无参均获取不到】),显式的定义一个无参构造器,则可以获取到使用了外部类对象当做其默认参数的内部类构造器。


原创文章多多支持!欢迎关注!


好书推荐!Java界公认的权威书籍!坚持读完,轻松拿下阿里巴巴offer!下方链接直接京东自营购买!

相关文章

Java 应用程序的 CPU 使用率飙升原因分析

1、背景在服务器上执行某个任务时,系统突然运行缓慢,top 发现cpu飙升,一度接近100%,最终导致服务假死。2、CPU 使用率怎么计算?CPU% = 1 - idleTime / sysTime...

Java 应用程序在 Kubernetes 上棘手的内存管理

如何结合使用 JVM Heap 堆和 Kubernetes 内存的 requests 和 limits 并远离麻烦。在容器环境中运行 Java 应用程序需要了解两者 —— JVM 内存机制和 Kube...

Java窗体应用程序人事管理系统web人资招聘员工劳资jsp源码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目描述Java窗体应用程序人事管...

太赞了!用Java实现的在线聊天小项目,适合巩固基础(附源码)

对于学习完JavaSE的小伙伴,急需要做一个JavaSE的综合性项目来练练手,提升综合编码能力,那么该JavaSE实现的DQ在线聊天项目项目就非常适合你来练手,该项目的主要目的是让学完Java SE的...

Java面试题:应用程序中存在包冲突的情况下,怎么发现和解决

你们能想象,一个工作4年的程序员,竟然连这个问题都搞不清楚。应用程序中存在包冲突的情况下,解决的问题应该很容易吧,甚至大家在工作中应该也遇到过啊。好吧,今天抽空给大家分享一下这个问题的回答思路。问题分...