黑马程序员技术交流社区

标题: 第十天练习四的问题 [打印本页]

作者: 刘 佳    时间: 2012-9-26 11:42
标题: 第十天练习四的问题
本帖最后由 刘 佳 于 2012-9-26 11:44 编辑

练习四第十九题,毕老师讲的有点不懂,大侠帮我仔细分析一下。。为什么里面是show()。。搞不懂

interface Test
{
        void func();
}
class Demo
{
        public static void main(String[] args)
        {
                //补足代码;(匿名内部类)

               
                new Demo().show(new Test())
                {
                        public void func(){}
                };

               
        }
        void show(Test t)
        {
                t.func();
        }
}
作者: 杜佳瑞    时间: 2012-9-26 11:54
红字部分用到了匿名内部类,但是楼主写的不对。
new Demo().show(new Test(){
     public void func(){}
});
作者: 彭润生    时间: 2012-9-26 12:03
楼上说的对,你也可以持有其引用,Test t = new Test(){  public void func(){}};  t.func();匿名内部类,就是实现抽象方法。
作者: 刘 佳    时间: 2012-9-26 12:06
杜佳瑞 发表于 2012-9-26 11:54
红字部分用到了匿名内部类,但是楼主写的不对。
new Demo().show(new Test(){
     public void func(){}

能不能把具体的思路告诉我?就是这个类是怎么想到怎么写出来的。。我不理解
作者: 汪小照    时间: 2012-9-26 12:06
interface Test
{
        void func();
}
class Demo
{
        public static void main(String[] args)
        {
                //补足代码;(匿名内部类)
                               new Demo().show(new Test()        //解释:第一个show方法调用的是自己的show,第二个show调用的是实现接口后的show
                                                                               //你的代码稍微有点不对,可以参考修改后的代码
                {
                        public void func(){
       System.out.println("运行正常");
      }
                });
               
        }
        void show(Test t)
        {
                t.func();
        }
}
运行结果:

1jpg.jpg (3.64 KB, 下载次数: 58)

1jpg.jpg

作者: 杜佳瑞    时间: 2012-9-26 12:23
刘 佳 发表于 2012-9-26 12:06
能不能把具体的思路告诉我?就是这个类是怎么想到怎么写出来的。。我不理解 ...

首先,你是要调用Demo这个对象的show()方法。这个show()方法中要传入一个Test类型的对象,但是Test是一个接口,不能直接创建对象,所以只能创建实现这个接口的子类对象,常规方法再写一个Test接口的子类,也许这一个子类对象只用一次,所以就没必要那么麻烦,于是引出了匿名内部类的概念。
形式呢就是你程序中写的那样:
new Demo()创建一个匿名Demo类对象,并调用show()方法。
其中show()中传入一个Test引用对象。
new Test(){复写Test接口的抽象方法};
我记得视频中讲的很清楚,再仔细看看
作者: 刘 佳    时间: 2012-9-26 13:17
杜佳瑞 发表于 2012-9-26 12:23
首先,你是要调用Demo这个对象的show()方法。这个show()方法中要传入一个Test类型的对象,但是Test是一个 ...

我不明白的地方是  为什么要调用Demo的show()方法。。。
作者: 杜佳瑞    时间: 2012-9-26 13:38
刘 佳 发表于 2012-9-26 13:17
我不明白的地方是  为什么要调用Demo的show()方法。。。

这就没法解释了,程序是这样设计的。其实最终调用的也是func(),你也可以直接调用
new Test(){
    public void func(){}
}.func();
作者: 王得新    时间: 2012-9-26 13:43
本帖最后由 王得新 于 2012-9-26 13:45 编辑

interface Test
{
        void func();
}
class Demo
{
        public static void main(String[] args)
        {
                //补足代码;(匿名内部类)
             /* Demo     demo=new Demo();//在这里创建一个对象,这个对象就是Demo这个类的一个实例,用这个对象干啥?(楼主想问的是为什么调show()
方法),当然是对Demo这个类进行操作了,怎么操作就是用对象调用show()方法啊,demo.show();
               demo.show(new Test(){   public void func();    });
             */
                new Demo().show(new Test())
                {
                        public void func(){}
                };

               
        }
        void show(Test t)
        {
                t.func();
        }
}

作者: 李铁    时间: 2012-9-26 14:35
我不明白的地方是  为什么要调用Demo的show()方法。。。


因为要实现Test接口里面的抽象方法func(),所以必须要调用;这样回答是不是够简单了





作者: 刘 佳    时间: 2012-9-26 15:38
谢谢大家,我自己再斟酌下,有点笨,死脑筋,呵呵~




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