今天来复习下内部类的一些基础知识。
首先是内部类的分类:
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); } } } }