Java内部类小程序(成员内部类,静态内部类,匿名内部类)
1 /** 2 * 测试java内部类(成员内部类,静态内部类,匿名内部类) 3 * 局部内部类不常用,就不写了。 4 * @package :java05 5 * @author shaobn 6 * @Describe : 7 * @Time: 2015-9-6 下午8:32:38 8 */ 9 public class TestInner { 10 11 /** 12 * @author shaobn 13 * @Describe : 14 * @param args 15 * @Time : 2015-9-6 下午8:32:09 16 */ 17 public static void main(String[] args) { 18 // TODO Auto-generated method stub 19 testInner_1(); 20 testInner_2(); 21 testInner_3(); 22 23 } 24 public static void testInner_1(){ 25 //成员内部类生成内部类对象方式一 26 Outer_1.Inner_1 oi_1 = new Outer_1().new Inner_1(); 27 System.out.println("成员内部类生成内部类对象方式一"); 28 oi_1.testIn_1(); 29 //成员内部类生成内部类对象方式二 30 Outer_1 o_1 = new Outer_1(); 31 System.out.println("成员内部类生成内部类对象方式二"); 32 o_1.getInner_1().testIn_1(); 33 //成员内部类生成内部类对象方式三 34 Outer_1 o_11 = new Outer_1(); 35 System.out.println("外部类访问内部类对象的成员"); 36 o_11.visitInner_1(); 37 } 38 public static void testInner_2(){ 39 //测试静态内部类 40 Outer_2 o_2 = new Outer_2(); 41 o_2.visitInner_2(); 42 Outer_2.Inner_2.testIn_2(); 43 } 44 public static void testInner_3(){ 45 Outer_3 o_3 = new Outer_3(); 46 System.out.println("访问匿名内部类方法方式一"); 47 //访问匿名内部类方法方式一 48 o_3._testInner_3(50).show(); 49 System.out.println("访问匿名内部类方法方式二"); 50 //访问匿名内部类方法方式二 51 o_3.testInner_3(50); 52 53 } 54 55 } 56 //测试成员内部类 57 class Outer_1{ 58 private int age = 10; 59 //测试成员内部类 60 public class Inner_1{ 61 public int age = 100; 62 public void testIn_1(){ 63 int age = 1000; 64 //访问外部类中成员变量 65 System.out.println(Outer_1.this.age); 66 //访问内部类中的成员变量 67 System.out.println(this.age); 68 //访问内部类中的局部变量 69 System.out.println(age); 70 } 71 } 72 //获取内部类对象(推荐) 73 public Inner_1 getInner_1(){ 74 return new Inner_1(); 75 } 76 //外部类访问内部类成员 77 public void visitInner_1(){ 78 System.out.println(getInner_1().age); 79 getInner_1().testIn_1(); 80 } 81 82 } 83 //测试静态内部类 84 class Outer_2{ 85 private int age = 20; 86 private static int length = 40; 87 public static class Inner_2{ 88 private String name = "静态内部类"; 89 private static float weight = 'A'; 90 public static void testIn_2(){ 91 //System.out.println(name);静态内部类中的静态方法必须要访问方法外部的静态成员变量,否则访问不允许。 92 System.out.println(Outer_2.length); 93 } 94 95 } 96 public Inner_2 getInner_2(){ 97 return new Outer_2.Inner_2(); 98 } 99 public Class<?> _getInner_2(){ 100 return Outer_2.Inner_2.class; 101 102 } 103 public void visitInner_2(){ 104 System.out.println(getInner_2().name); 105 System.out.println(Outer_2.Inner_2.weight); 106 } 107 108 } 109 //内部类实现接口 110 interface SuperIner_3{ 111 void show(); 112 } 113 //测试匿名内部类 114 class Outer_3{ 115 private int age = 30; 116 //方式一 117 public SuperIner_3 _testInner_3(final int height){ 118 final int weight = 40; 119 SuperIner_3 si_3 = new SuperIner_3() { 120 121 @Override 122 public void show() { 123 // TODO Auto-generated method stub 124 System.out.println(Outer_3.this.age); 125 System.out.println(weight);//匿名内部类只能访问final类型局部变量 126 System.out.println(height); 127 } 128 }; 129 return si_3; 130 131 } 132 //方式二 133 public void testInner_3(final int height){ 134 final int weiht = 40; 135 new SuperIner_3() { 136 @Override 137 public void show() { 138 // TODO Auto-generated method stub 139 System.out.println(Outer_3.this.age); 140 System.out.println(weiht);//匿名内部类只能访问final类型局部变量 141 System.out.println(height); 142 143 } 144 }.show(); 145 146 } 147 }
局部内部类不经常用就不写了,如有错误,望大家纠正。
吾宁做一叶扁舟,始航于湖边,遨游于海上,浪迹于江中。