zoukankan      html  css  js  c++  java
  • 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 }

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

    吾宁做一叶扁舟,始航于湖边,遨游于海上,浪迹于江中。
  • 相关阅读:
    Thinkpad R400无线网络一个都不见了!
    如果使用安卓4.4的SD卡?
    如何使用安卓4.4的SD卡?
    在IAR使用FreeRTOS出现Error[Pa045]: function "XXX" has no prototype
    DSP5509的RTC实验-第3篇
    LWM2M简介-学习记录
    DSP5509的定时器实验-第2篇
    DSP5509的XF实验-第一篇
    华为LiteOS系统使用-任务调度函数-第一篇
    2017-12-24自选的股票之春秋航空
  • 原文地址:https://www.cnblogs.com/assassin666/p/4787517.html
Copyright © 2011-2022 走看看