A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵晓东 中级黑马   /  2013-3-19 13:52  /  1692 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵晓东 于 2013-3-19 20:24 编辑
  1. /*File_List*/

  2. import java.io.*;

  3. class  ListDemo
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 list2();
  8.         }
  9.         public static void list1()
  10.         {
  11.                 File fi = new File("E:\\");
  12.                 String[] fil = fi.list();
  13.                         
  14.                 for (String file: fil)
  15.                 {
  16.                         System.out.println(file);
  17.                 }
  18.         }
  19.         public static void list2()
  20.         {
  21.                 File f = new File("E:\\javase");

  22.                 File[] fi = f.listFiles(new FilenameFilter() //疑问在这里,为什么这个接口创建了对象
  23.                 {
  24.                         public boolean accept(File dir,String name)
  25.                         {        
  26.                                 return name.endsWith(".java");
  27.                         }
  28.                 });
  29.                 for (File fil : fi)
  30.                 {
  31.                         System.out.println("name: "+fil.getName()+" size : "+fil.length()+"字节");
  32.                 }
  33.         }
  34. }
  35. /*
  36. public interface FilenameFilter

  37. 这是个接口,为什么new了一个对象?
  38. 匿名内部类 如果实现接口,不用写implements吗?
  39. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 张亚青 于 2013-3-19 14:14 编辑

【匿名内部类】
匿名内部类
1、匿名内部类其实就是内部类的简写格式。
2、定义匿名内部类的前提:
        内部类必须是继承一个类或者实现接口。
3、匿名内部类的格式:new 父类或者接口(){定义子类的内容}
4、其实匿名内部类就是一个匿名子类对象。
5、匿名内部类中定义的方法最好不要超过3个。


匿名内部类就是为了简化书写,覆盖方法。
匿名内部类不能进行强转(向上转型)。


【答案】在本题中参照第3点可以看出,这是规定好的创建匿名内部类的格式。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
File[] fi = f.listFiles(new FilenameFilter() //疑问在这里,为什么这个接口创建了对象?

                {

                        public boolean accept(File dir,String name)

                        {        

                                return name.endsWith(".java");

                        }

                });

这是个匿名内部类,并不是接口创建的对象,接口是不能创建对象的,表面上看是接口创建的对象,但后面的那对儿代码块{}实质是创建了一个匿名的类去实现了接口,并创建了实例对象,这个过程是一气呵成的,中间省略了一些细节,所以代码简单,不需要用到implements关键字。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马