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 }

局部内部类不经常用就不写了,如有错误,望大家纠正。

吾宁做一叶扁舟,始航于湖边,遨游于海上,浪迹于江中。
原文地址:https://www.cnblogs.com/assassin666/p/4787517.html