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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-8-23 20:31  /  1594 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

/*
补足了是
new Demo().show(new Test()
{
public void func(){}
});
*/

老师讲的时候一下就写出来了,看是能看懂,就是自己一写就
不知道怎么下手,能不能给我讲下这种题目的思路?

5 个回复

倒序浏览
匿名内部类就是没有指定某个类对象名称的类,如果要使得它,就要先在类的内部定义内部类,并定义其属性和方法。匿名内部类可以访问外部类的私有成员,其他的方式如实现接口和继承类都做不到。
回复 使用道具 举报
是,我知道这。就是当你要补足代码的时候怎样一步一步想到这些代码的?
回复 使用道具 举报
//这样理解吧,show里面接收的是Test是吧,那new Test(){}出来了,里面调用。func方法,那public void func(){}出来了,但是想调用show方法,那就需要对象,因为不是static的
//所以newDemo了,最后就出来
回复 使用道具 举报
是的,谢谢   已解决
回复 使用道具 举报

interface Test
{
        void func();
}
class Demo
{
        public static void main(String[] args)
        {
                //补足代码(匿名内部类)
                //2:
                Test t=new Test(){
                        public void func()
                        {
                                System.out.println("Test.func()>>>>>run");
                        }
                };
                //3:
                new Demo().show(t);
        }
        void show(Test t)//1:
        {
                 t.func();
        }
}
/*
原代码只有序号1部分。
1:show方法的参数是Test t,说明要传入一个Test的对象,而Test是一个接口,那么要创建一个类实现这个接口。题目说是要用匿名内部类的方法。那么根据匿名内部类的格式:new 父类或者接口名(构造函数参数列表){子类内容};
2:我用Test t接收一下,方便你理解。匿名内部类,就是内部类的简写格式,就是一个带执行体的匿名子类对象。在{}里面,实现Test接口的func方法。
3:调用show方法,并将创建的匿名内部类作为参数传递。因为show方法不是静态的,所以要创建Demo类的对象:Demo d=new Demo();
因为只是调用一次,所以可以采用匿名对象的形式来写:new Demo().show(t),
4:最后把2,3步优化一下,将创建的匿名内部类对象作为参数,传递给show方法就成了:
new Demo().show(new Test()
{
public void func(){}
});

不知道这样能看懂不?你只要把匿名内部类的前提,格式,概念理解了,这个思路就很好想到。
*/
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马