内部类,一个被称为静态嵌套类,一个被称为内部类。
从字面的角度解释是这样的:
什么是嵌套?嵌套就是我跟你没关系,自己可以完全独立存在,但是我就想借你的壳用一下,来隐藏一下我自己,,不想被其他类依赖。
什么是内部?内部就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)
静态内部类的实例不需要先实例化外部类成员,可直接实例化。
①静态内部类中可以有非静态的方法
②当内部类中有静态方法或者静态成员变量时,一定是静态内部类
public class Outerclass { static class Inner{ private void innerVoidMethod(){//静态内部类中可以有非静态的方法 Outerclass.outerStaticMethod();//静态内部类可以访问外部类的静态成员和方法 new Outerclass().outerVoidMethod(); //Outerclass().outerVoidMethod();//error, 静态内部类不可以直接访问外部类的非静态成员和方法 } private static void innerStaticMethod(){ Outerclass.outerStaticMethod();//静态内部类可以访问外部类的静态成员和方法 //Outerclass().outerVoidMethod();//error, 静态内部类不可以直接访问外部类的非静态成员和方法 } } /*class Inner2{ //error,当内部类中有静态方法或者静态成员变量时,一定是静态内部类 private static void inner2StaticMethod(){ } }*/ private void outerVoidMethod(){ System.out.println("outerVoidMethod"); } private static void outerStaticMethod(){ System.out.println("outerStaticMethod"); } public static void main(String[] args) { new Inner().innerVoidMethod();//静态内部类的实例不需要先实例化外部类成员,可直接实例化 Inner.innerStaticMethod(); } }
outerStaticMethod
outerVoidMethod
outerStaticMethod
outerVoidMethod