内部类与无名内部类

  1. 云栖社区>
  2. 博客>
  3. 正文

内部类与无名内部类

技术小阿哥 2017-11-28 14:02:00 浏览528
展开阅读全文

内部类:

  内部类是类中的类,内部类也属于类的一个成员。内部类分静态类和实例类,内部类也可以进行继承、实现接口等类可以做的操作。

 实例类:

07bdd08c7527415934b44610263f8c4d.png


内部类也是类中成员,也有静态和实例的区分,所以实例的内部类实际上相当于一个实例成员,要注意的是:实例的内部类不可以写静态的成员。实例内部类基本可以对外类的所有成员进行访问:

b14076099dde5c41f9e70a41d4f77701.png


因为实例成员要在new对象时才会分配内存,所以在外类需要构建实例内部类的对象时,必须先得构建加载外类的对象来构建实例内部类的对象。例如:

f11a34eb4d359e628b2388001affa1a8.png


静态内部类:

    静态内部类就像类的静态成员一样,使用static关键字声明。静态内部类不可以对外类或其他类的实例成员进行访问,静态内部类也是像静态成员一样在类加载时就加载分配内存,所以不需要创建外类的对象就可以构建静态内部类的对象。例如:

e4f7319ed17a27f257ca1b9bc4002288.png


内部类可以做类可以做的事情,例如继承父类实现接口等:

23e2ea1678845985ab7591bff25e9b9a.png


内部接口:

  可以在类中声明一个内部接口,这个接口可以被类实现。与普通接口一样唯一的区别就是申请在内部。例如:

435f71c2379ba2b3e95b18addb1bbdc6.png



内部抽象类:

  可以在类中声明一个内部抽象类,普通抽象类和纯抽象类都可以,这个抽象类可以被子类继承。与普通抽象类一样唯一的区别就是申请在内部。例如:

960349ceefc6401ba4f5d0b6c9965752.png


内部类会不会产生class文件呢?:

  只要是声明的是类都会产生一个class文件:

ef7c141fa1e6b3c4aa59d6d7c943c8b6.png

faf24a241a0296f666b4d46226dd8797.png

会产生图片中这种命名格式的class文件:Five$A.class=外类名$内部类名.class



无名内部类:

    申请一个无名内部类的话,这个类会自动继承于外类,可以重写父类的方法,无名内部类可以写在main方法内,但是不可以写静态成员。例如:

b797f3b1336cc4c0a7991c685840cd57.png


这种写法也是申请一个无名内部类:

64a37ac48faebd9ec64664054b388d2f.png


还可以声明一个自动继承别的类的无名内部类:

cd6ed94f2ad9a551dc6b3c72e0bd5ee3.png


无名内部类也是会产生一个class文件:

a61c55cd41ca3a77c72f241e882b18fe.png

会产生图片中这种命名格式的class文件:Five$1.class=外类名$无名内部类名(用数字表示).class




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1974346,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小阿哥
+ 关注