publicclassOuter{privateString s1 ="this is s1 in Outer";privateString s_outer ="this is s_outer in Outer";privateint id;publicvoidout(){System.out.println("这是外部类");}privateStringmethod2(){return"this is method2 in Inner";}//成员内部类publicclassInner{//public static String test;报错:内部类不能定义静态元素publicvoidin(){System.out.println("这是成员内部类");}//获取外部类的私有属性publicvoidgetId(){System.out.println(id);}}//静态内部类:Java文档中是这样描述static内部类的:一旦内部类使用static修饰,那么此时这个内部类就升级为顶级类。publicstaticclassStaticInner{publicstaticString test;//可以定义静态属性publicvoidin(){System.out.println("这是静态内部类");}//无法获取外部属性,除非把属性也该为staticpublicvoidgetId(){//System.out.println(id);}}//局部内部类/*
1、内部类不能被public、private、static修饰;
2、在外部类中不能创建内部类的实例;
3、创建内部类的实例只能在包含他的方法中;
4、内部类访问包含他的方法中的变量必须有final修饰;
5、外部类不能访问局部内部类,只能在方法体中访问局部内部类,且访问必须在内部类定义之后。
*/publicvoidmethod(){finalString innerField ="this is field in method";classInner{privateString s1 ="this is s1 in Inner";publicvoidinner(){System.out.println("局部内部类");// 内部类访问外部方法的变量,需要有final修饰System.out.println(innerField);// 局部内部类可直接访问外部类的变量,即使是私有的System.out.println(s_outer);// 内部类和外部类有同名变量和方法时System.out.println(s1);System.out.println(Outer.this.s1);System.out.println(method2());System.out.println(Outer.this.method2());}privateStringmethod2(){return"this is method2 in Inner";}}Inner inner =newInner();
inner.inner();}}interfaceAnonymousInner{voidhello();}
内部类示例public class Outer { private String s1 = "this is s1 in Outer"; private String s_outer = "this is s_outer in Outer"; private int id; public void out(){ System.out.println("这是外部类"); } private String method2() {