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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马州州 中级黑马   /  2012-7-22 23:11  /  2112 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马州州 于 2012-7-23 11:26 编辑

代码如下
  1. interface Test
  2. {
  3. void func();
  4. }
  5. class Demo
  6. {
  7. public static void main(String[] args)
  8. {
  9. new Demo().show(new Test()//就是这一句不太明白
  10. {
  11. public void func(){}
  12. });                                       //备注一下啊,这是一个语句,看清了啊
  13. }
  14. void show(Test t)
  15. {
  16. t.func;
  17. }
复制代码
为了执行t.func,我知道因为主函数是静态的,show方法不是静态的,所以new Demo().show
后面的那些大概意思我也明白,能不能跟我具体的说一下为什么要那样写呢?

5 个回复

倒序浏览
其实可以这样理解
Demo demo = new Demo();
Test test = new test();
demo.show(test);
这样写使用可以简化代码啊,只要理解了。3行代码一句话就搞定。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
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,对于那种只需要使用一次的类,匿名内部类的写法更加简洁。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
  1. interface Test
  2. {
  3.          void func();
  4. }

  5. class Demo
  6. {
  7.          public static void main(String[] args)
  8.          {
  9.                  //可以建立一个接口的引用指向其子类的对象
  10.     Test t =new Test()//new Test(){};这是匿名内部类的书写格式  不是实例化接口哦。
  11.                    //定义匿名内部类必须要实现一个接口或者继承一个类
  12.                  {         //匿名内部类就是一个匿名子类对象,是把内部类和建立对象封装在一起
  13.                                 
  14.          public void func()
  15.                          {
  16.               System.out.println("run....");
  17.                  }
  18.          };
  19. new Demo().show(t);//这样写是不是看着更清楚一些呢?
  20.          
  21.          }

  22.          void show(Test t)
  23.          {
  24.          t.func();
  25.          }
  26. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
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的实例。可以这样理解匿名内部类。
回复 使用道具 举报
这其实就是一个链式的写法,和咱们先实例对象后调用是一回事,这样也是一种习惯。改回来就这样写: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.}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马