静态内部类 vs 内部类
Terminology:
Nested classes are divided into 2 categories: static & non-static. Nested classes that are declared static are called static nested classes (静态嵌套类). Non-static classes are called inner classes.
0.简单总结 (quick scratch)
内部类:我是你的一部分,我了解你,知道你的全部(所有属性及方法),没有你就没有我。
( 因此内部类对象的创建依赖于外部类对象的存在)
静态内部类: 我和你没有关系,我可以独立于外部类对象存在,但是要借用你的壳子用一下,隐藏自己。
0.0 静态成员 vs 非静态成员
静态成员: 属于这个class,数据存放在class文件中,在程序运行时之前加载完成(数据已存放)
非静态成员: 属于这个class的对象,程序运行时生成在堆栈中。
1. 内部类
1.1 内部类定义
定义: 在一个类中定义并创建的类
语法:
class OuterClassA {
...
class NestedClassB {
...
}
}
1.2 内部类优势
- 内部类方法可以访问该类定义所在的作用域中的数据,包括了private成员
- 内部类可以对同一个package中的其他类不可见
与static nested class (静态内部类)最大区别:
非静态内部类编译后,隐式保留着外部类的引用,就算外部类对象不使用后也不会被GC,但是静态内部类不会
1.3 内部类例子
/ **
*
* Human类
*
* @author: RichardWWHH
*/
package learn.innerclasses;
public class Human {
private static final int eyes = 2;
private static void count() {
System.out.println("I can count");
}
private int teeth = 32;
private