黑马程序员技术交流社区

标题: 哎,又是关于内部类的问题,一直没搞明白 [打印本页]

作者: 薆情媬証書    时间: 2013-10-16 19:09
标题: 哎,又是关于内部类的问题,一直没搞明白
本帖最后由 薆情媬証書 于 2013-10-16 22:25 编辑

先看下代码

  1. <p>File dir = new File("d:\\java");
  2. String[] arr = dir.list(new FilenameFilter()
  3. {
  4. public boolean accept(File dir, String name)
  5. {
  6.   return false;
  7. }
  8. }); </p>
复制代码
该段代码中,第二句代码的含义??
还有FilenameFilter不是抽象类吗,抽象类不是不能有对象吗,怎么用了new呢?

还有,最好能写出该内部类不简写的原码。
先谢过!


作者: loading……99.9    时间: 2013-10-16 19:24
第二句表示该方法接受一个FilenameFilter类型的参数,FilenameFilter是个接口,楼主真应该好好看看匿名内部类了,上面的代码等同于
  1. File dir = new File("d:\\java");
  2.         String[] arr = dir.list(new MyFilenameFilter());
  3.        
  4.         class MyFilenameFilter implements FilenameFilter
  5.         {
  6.                 public boolean accept(File dir, String name)
  7.                 {
  8.                         return false;
  9.                 }
  10.         }
复制代码

作者: 呆萌    时间: 2013-10-16 19:29
这个应该叫匿名内部类的问题。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
源码如下:
String[] arr = dir.list(子类对象);
class 子类 extends 父类 (或者implements 接口)

覆盖父类或者接口中的方法;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
匿名内部类从名字上就知道子类是没有名字的,所以用父类或者接口名实例化,就是:
new 父类名或者接口名(){复写父类或者接口中的方法}
String[] arr = dir.list(new FilenameFilter(){public boolean accept(File dir, String name){return false;}});
为了阶梯层次阅读性,分行之后:
String[] arr = dir.list(new FilenameFilter()
{
        public boolean accept(File dir, String name)
         {
          return false;
          }
});
作者: 李江    时间: 2013-10-16 19:35
问题解决后把帖子状态改为提问结束...谢谢楼楼了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2