黑马程序员技术交流社区

标题: 匿名内部类好难理解,帮忙解释一下。。。 [打印本页]

作者: 探寻者    时间: 2014-12-18 00:17
标题: 匿名内部类好难理解,帮忙解释一下。。。
interface Inter
{
        void method();
}
class Test1
{
        static  Inter function()
        {
                return new Inter()
                {
                        public void method()
                        {
                                System.out.println("method run.");
                        }
                };
        }
}
从return new Inter()开始,感觉好像就不对了。。。


作者: 探寻者    时间: 2014-12-19 12:19
如果写成这样:
作者: 探寻者    时间: 2014-12-19 12:22
今天又看了视频,如果写成这样,就容易理解了:
interface Inter
{
        void method();
}
class Test1
{
         class inner implements Inter
        {
                public void method()
                {
                        System.out.println("method run.");
                }
        }
}

主函数中用内部类调用:
Test1.inner ti=new Test1().new inner();
                ti.method();

作者: duluhua    时间: 2014-12-19 14:18
感觉的话,你这么写是可以的,不过好像有点不想匿名内部类了。
你看看这么写如何:
public interface ITest {//定义接口
    void method();//接口方法
}

public class Test2 {

    public static void main(String[] args) {
        //new接口
        new ITest() {
            //紧跟着实现接口的方法
            @Override
            public void method() {
                System.out.println("ddddddddd");
            }
        }.method();//用new的对象再调用匿名对象所实现的方法
    }
}

其实在 多线程这里也使用匿名内部类了
new Thread(new Runnable(){
@Override
public void run(){
   System.out.println("ddd")
}
}).start();

至少我是这么理解的,匿名,也就是没有名称,也就是new的对象是没有名称的,new对象后跟{},{}里面是方法的具体实现,然后用new的对象再紧跟着调用所实现的方法。应该就是这么个流程吧。
你认为这么理解如何。。
作者: 探寻者    时间: 2014-12-19 16:03
duluhua 发表于 2014-12-19 14:18
感觉的话,你这么写是可以的,不过好像有点不想匿名内部类了。
你看看这么写如何:
public interface ITest ...

嗯,我那样写是有类名的内部类了,感觉匿名内部类好难理解,所以就用有名字的了。。
作者: duluhua    时间: 2014-12-19 16:17
现在理解了么
作者: 探寻者    时间: 2014-12-19 16:32
duluhua 发表于 2014-12-19 16:17
现在理解了么

至少有概念了,你代码解释很详细,后面写的自己的理解也透彻,谢谢学习了
作者: 提米特    时间: 2014-12-19 22:44
匿名一般就是用在只用一次的情景,没必要创建引用的时候使用。或者工具类的使用的时候可以用匿名类。

属于一种避免浪费内存和减少操作的技巧。这是我的理解。




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