内部类的作用是:可以访问外部类中的私有数据

成员内部类:

  1. 成员内部类可以等同的看做是成员变量。

  2. 成员内部类不能有静态声明。

  3. 成员内部类可以访问外部类的所有的数据。

public class OuterClass{		//静态变量	private static String s1 = "A";		//成员变量	private String s2 = "B";		//静态方法	private static void m1(){		System.out.println("static's m1 method execute!");	}		//成员方法	private void m2(){		System.out.println("m2 method execute!");	}		//成员内部类	//可以用访问控制权限的修饰符修饰。	//public,protected,private,缺省	class InnerClass{				//静态方法		//public static void m3(){}				//成员方法		public void m4(){			System.out.println(s1);			m1();						System.out.println(s2);			m2();		}	}		//入口	public static void main(String[] args){				//创建外部类对象		OuterClass oc = new OuterClass();				InnerClass inner = oc.new InnerClass();//注意成员内部类的访问方式				inner.m4();			}}静态内部类:可以看做是静态变量 ,可以访问外部类的静态数据,无法直接访问成员。public class OuterClass{		//静态变量	private static String s1 = "A";		//成员变量	private String s2 = "B";		//静态方法	private static void m1(){		System.out.println("static's m1 method execute!");	}		//成员方法	private void m2(){		System.out.println("m2 method execute!");	}		//静态内部类	//可以用访问控制权限的修饰符修饰。	//public,protected,private,缺省	static class InnerClass{				//静态方法		public static void m3(){			System.out.println(s1);			m1();						//System.out.println(s2);			//m2();		}				//成员方法		public void m4(){			System.out.println(s1);			m1();						//System.out.println(s2);			//m2();//不能访问外部类的成员方法和成员变量。		}	}			//入口	public static void main(String[] args){				//执行m3		OuterClass.InnerClass.m3();				//执行m4		InnerClass inner = new OuterClass.InnerClass();//创建静态内部类的对象		inner.m4();			}	}局部内部类:  局部内部类相当于局部变量,局部内部类在访问局部变量的时候必须用final修饰;  (jdk1.8中的新特性好像是取消了)。  public class OuterClass{		//方法	public void m1(){				//局部变量		final int i = 10;//为什么用final修饰?				//局部内部类		//局部内部类不能用访问控制权限修饰符修饰。		class InnerClass{						//内部类不能有静态声明			//public static void m1(){}						//成员方法			public void m2(){				System.out.println(i); // 10			}						}				//调用m2		InnerClass inner = new InnerClass();		inner.m2();//怎么样使用m2方法。			}			//入口	public static void main(String[] args){		OuterClass oc = new OuterClass();		oc.m1();		}		匿名内部类:/*	匿名内部类:指的是类没有名字.*/public class Test{		//静态方法	public static void t(CustomerService cs){		cs.logout();	}		//入口	public static void main(String[] args){				//调用t方法		//t(new CustomerServiceImpl());				//使用匿名内部类的方式执行t方法		//整个这个"new CustomerService(){}"就是个匿名内部类		t(new CustomerService(){			public void logout(){				System.out.println("exit!");			}		});				//匿名内部类的优点:少定义一个类.		//缺点:无法重复使用!	}	}//接口interface CustomerService{		//退出系统	void logout();	}//编写一个类实现CustomerService接口/*class CustomerServiceImpl implements CustomerService{	public void logout(){		System.out.println("系统已经安全退出!");	}}*/