首页 > 技术文章 > java基础随笔-内部类

jiligalaer 2016-04-12 10:19 原文

       今天来复习下内部类的一些基础知识。

          首先是内部类的分类:

                       1、成员内部类

                       2、静态内部类

                       3、匿名内部类

                       4、局部内部类

          下面逐一来介绍下。

                      首先是成员内部类,就是将内部类作为一个成员变量来处理。具体例子如下:

public class ChengYuanInnerClass {

     private int num=3;
     
     class InnerClass{
         
         private int num=4;
         
         public void test(){
             int num =5;
             System.out.println("test.num="+num);
             System.out.println("innerclass.num="+this.num);
             System.out.println("ChengYuanInnerClass.num="+ChengYuanInnerClass.this.num);
         }
     }
     
     public static void main(String[] args) {
        ChengYuanInnerClass.InnerClass innerClass = new ChengYuanInnerClass().new InnerClass();
        innerClass.test();
    }
}

结果:

test.num=5
innerclass.num=4
ChengYuanInnerClass.num=3

                          静态内部类是指作为一个静态类放置在某个类内部。

public class StaticInnerClass {

     private static int num =3;
     
     static class InnerClass{
         private static int num =4;
         
         public static void test(){
            int num = 5;
             System.out.println("test.num="+num);
             System.out.println("innerClass.num="+InnerClass.num);
             System.out.println("StaticInnerClass.num="+StaticInnerClass.num);
             //static是在类还没有调用构造参数实例化类之前就已经被执行,所以this这个是不正确的。
         }
     }
     
     public static void main(String[] args) {
         StaticInnerClass.InnerClass.test();
    }
}

结果:

test.num=5
innerClass.num=4
StaticInnerClass.num=3

               3、匿名内部类:是针对某个接口只有一个方法时,我们为了方面代码的编写,直接new该接口实现其内部的这个唯一方法。

public class NiMingInnerClass {

     public static void main(String[] args) {
        String[] fileNames = new File("/Users/test").list(new FilenameFilter() {
            
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith("txt");
            }
        });
        if(null!= fileNames && fileNames.length!=0){
            for(String filename : fileNames){
                System.out.println(filename);
            }
        }
    }
}

       

推荐阅读