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

createh54个月前 (12-16)技术教程46

什么是内部类?

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

那么,

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

内部类的坑

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

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

什么时候会用到内部类?

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

继承内部类时有哪些坑?

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


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

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


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


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

相关文章

java程序、小程序和应用程序三者为什么可以共同存在

今天跟大家总结一下java程序、小程序和应用程序三者之间的应用关系,如果你有更好的想法,可以写在评论区。一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()...

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

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