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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© code_linux 中级黑马   /  2015-8-18 19:39  /  600 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class TestAbstract  {
        public static void main(String[] args)  {
                Test t=new Test();
                t.function();
        }
}

interface Inter {
        public abstract void method();
}

class Test {
        static void function() {
                new Inter() {
                   public void method() {
                          System.out.println("method");
                        }
               };
        }
}



为什么打印不出method呢?

10 个回复

倒序浏览
本帖最后由 qlmmys 于 2015-8-18 23:42 编辑

没有调用method()
回复 使用道具 举报
你的匿名内部类没有调用method()方法,当然不打印了
new Inter() {
                   public void method() {
                          System.out.println("method");
                        }
               }.method();
回复 使用道具 举报

  1. class Test {
  2.         static void function() {
  3.                 new Inter() {
  4.                    public void method() {
  5.                           System.out.println("method");
  6.                         }
  7.                }[color=Red].method();[/color]
  8.         }
  9. }
复制代码
回复 使用道具 举报
没有调用method()方法
回复 使用道具 举报
2楼正解
回复 使用道具 举报
你没有调用啊
回复 使用道具 举报
本帖最后由 sangyuan 于 2015-8-19 12:00 编辑

刚登录看见~~ 匿名内部类我也是刚学,把我理解的给你说一下吧,仅供参考。你这个程序中匿名内部类的格式写错了,匿名内部类的格式:new 父类名或者接口名(){定义子类成员或者覆盖父类方法}.方法   
  1. new Inter() {
  2.                    public void method() {
  3.                           System.out.println("method");
  4.                         }
  5.                }.method();
复制代码
下面用一个小程序来给你说说匿名内部类一般什么时候用,以及用的好处;
  1. /*
  2.         所有父类或者父接口出现的地方,完全可以用子类对象替代。
  3. */
  4. interface Animal
  5. {
  6.         public abstract void eat();

  7. }
  8. //方式一:普通的方法,创建一个Dog类来实现接口Animal的show方法,然后在下面测试类中,再创建一个对象来调用这个方法
  9. /*
  10. class Dog implements Animal
  11. {
  12.         public void eat()
  13.         {
  14.                 System.out.println("eat dog");
  15.         }
  16. }
  17. */
  18. class Test
  19. {
  20.         //一个方法的形式参数是接口(抽象类)
  21.         public void show(Animal a) //Animal a =  new Dog();
  22.         {
  23.                 a.eat();
  24.         }
  25. }

  26. class AnimalTest
  27. {
  28.         public static void main(String[] args)
  29.         {
  30.                 Test t = new Test();

  31.                 //Dog d = new Dog();
  32.                 //t.show(d);
  33.         
  34.                //方法二:使用匿名内部类,这样就不用再创建类,也不用再测试类中创建对象,需要注意的是,在这儿,匿名内部类是作为show方法里的参数进行传递的。你那个程序是在通过匿名内部类建立一个Inter的子类对象
复制代码
不知道对你有帮助没?  这是我自己的理解,如果哪点儿说的不对,也希望看到的大神们帮忙指正!!!
回复 使用道具 举报
方法二不知道怎么回事儿,粘不上去,付下面吧
  1. t.show(new Animal(){
  2.                         public void eat()
  3.                         {
  4.                                 System.out.println("eat dog");
  5.                         }
  6.                 });
  7.         }
  8. }
复制代码
回复 使用道具 举报
new Inter() {
                   public void method() {
                          System.out.println("method");
                        }
               };
楼主。你只是重写了方法,并没有调用method
回复 使用道具 举报
dk_mrbai 来自手机 中级黑马 2015-8-19 12:09:22
11#
学安卓的用的多,EE的话用得少
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马