黑马程序员技术交流社区
标题:
关于匿名内部类的一个问题
[打印本页]
作者:
马州州
时间:
2012-7-22 23:11
标题:
关于匿名内部类的一个问题
本帖最后由 马州州 于 2012-7-23 11:26 编辑
代码如下
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;
}
复制代码
为了执行t.func,我知道因为主函数是静态的,show方法不是静态的,所以new Demo().show
后面的那些大概意思我也明白,能不能跟我具体的说一下为什么要那样写呢?
作者:
艾衍年
时间:
2012-7-22 23:37
其实可以这样理解
Demo demo = new Demo();
Test test = new test();
demo.show(test);
这样写使用可以简化代码啊,只要理解了。3行代码一句话就搞定。
作者:
黑马王冬冬
时间:
2012-7-23 01:22
1.Test是一个接口,假设使用类impTest来实现接口,并创建impTest类的对象,则impTest类必须实现接口Test中的所有方法。
2.new Demo()对象调用方法show时,需要传入实现Test接口的类的对象t。因此需要创建一个Test接口的实现类,并创建其对象。
void impTest implements Test
{
public void func() {}
}
new Demo().show(new impTest());
也可以创建一个实现Test接口的匿名内部类。
3,对于那种只需要使用一次的类,匿名内部类的写法更加简洁。
作者:
朱云坤
时间:
2012-7-23 03:00
interface Test
{
void func();
}
class Demo
{
public static void main(String[] args)
{
//可以建立一个接口的引用指向其子类的对象
Test t =new Test()//new Test(){};这是匿名内部类的书写格式 不是实例化接口哦。
//定义匿名内部类必须要实现一个接口或者继承一个类
{ //匿名内部类就是一个匿名子类对象,是把内部类和建立对象封装在一起
public void func()
{
System.out.println("run....");
}
};
new Demo().show(t);//这样写是不是看着更清楚一些呢?
}
void show(Test t)
{
t.func();
}
}
复制代码
作者:
胡文凡
时间:
2012-7-23 03:35
new Demo().show(new Test()//就是这一句不太明白
{
public void func(){}
}); //备注一下啊,这是一个语句,看清了啊
想想如果Test()不是一个接口,而是一个简单的类, new Demo().show(new Test())。这样的代码应该可以理解吧,也可以理解成创建了一个匿名实例
而new Test()在这里行不通,因为Test是一个接口,要创建一个接口的实例,必须复写它的方法,所以才有了后面的代码:
new Test()//就是这一句不太明白
{
public void func(){}
}
而代码合起来也是创建一个接口Test的实例,然后show()方法需要的参数就是一个Test的实例。可以这样理解匿名内部类。
作者:
郭凯敏
时间:
2012-7-23 05:01
这其实就是一个链式的写法,和咱们先实例对象后调用是一回事,这样也是一种习惯。改回来就这样写:
Demo do=new Demo(); do.show(new Test() {public void func(){}});
加油兄弟
01.interface Test
02.{
03.void func();
04.}
05.class Demo
06.{
07.public static void main(String[] args)
08.{
09.
new Demo().show(new Test()//就是这一句不太明白
10.{
11.public void func(){}
12.});
//备注一下啊,这是一个语句,看清了啊
13.}
14.void show(Test t)
15.{
16.t.func;
17.}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2