Java Inner Class 跟 Static Inner Class
Java Inner Class 和 Static Inner Class
2、inner class:为什么需要内部类?主要有3个好处:
4、static inner class 和 外部类(即 top level class)基本是一致的,不包含 outer class 的 instance reference。所以可以看做一个 top level class。只是为了更好的组织类结构才将这个类所谓内部类。当然instance static inner class 的语法和 top level class 稍有不同。static inner class 可以定义static field和 static method。所以可以再 static inner class 中写main函数,以测试 outer class 的功能。
1、Java没有static class 概念,static 在修饰 class 的时候,只能修饰 inner class,即所谓的 static inner class(静态内部类)。
2、inner class:为什么需要内部类?主要有3个好处:
- 为了更好的组织类层次。如果一个类只在某处使用,那么内部类是很好的选择。比如常用的 java.util.HashMap 内部使用了 Entry<K,V>,这个Entry class 仅仅是为了 HashMap 使用,所以采用内部类的方式。这种例子还有各种helper class。
- 更好的封装。非静态内部类可以访问外部类的私有成员,使用内部类可以在实现功能的同时,对外隐藏内部类本身,实现更好的封装。
- 使用较小的内部类,代码的可读性和可维护性更好。
3、非静态内部类可以访问外部类的私有成员,是因为非静态内部类含有外部包装类的一个instance。因为非静态内部类含有外部类的instance,所以不能定义static field 和 static method。(static field 和 static method 的scope是Class,而不是 instance,因此包含外部类的 instance 的内部类不能定义 static member)。
4、static inner class 和 外部类(即 top level class)基本是一致的,不包含 outer class 的 instance reference。所以可以看做一个 top level class。只是为了更好的组织类结构才将这个类所谓内部类。当然instance static inner class 的语法和 top level class 稍有不同。static inner class 可以定义static field和 static method。所以可以再 static inner class 中写main函数,以测试 outer class 的功能。
关于 inner class 和 static inner class 比较权威的文档和说明:
- java官方 tutorial : http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
- stackoverflow : http://stackoverflow.com/questions/253492/static-nested-class-in-java-why 关于 static inner class的本质比较精炼的总结:In effect, a static nested class is behaviorally a top-level class that has been nested in another top-level class for packaging convenience.