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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 施家雄 高级黑马   /  2013-3-3 12:01  /  2137 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

abstract class AbsDemo
{
        abstract void show();
}
class Outer
{
        int x=3;
        public void function()
        {
                new AbsDemo()
                {
                        void show()
                        {
                                System.out.println("x=="+x);
                        }
                }.show();      //这里不是很理解。
        }        
}

class InnerClassDemo
{
        public static void main(String[] args)
        {
                new Outer().function();
        }
}
/*
上面注释的地方不是很明白。觉得不加.show()也行的,可以就是出错了,说那行要分号(;)哪位大能给我详细讲下,谢谢了。

*/

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励,加油

查看全部评分

6 个回复

倒序浏览
public void function()
        {
                new AbsDemo()
                {
                        void show()
                        {
                                System.out.println("x=="+x);
                        }
                }.show();      //这里不是很理解。你写这个函数的意思很明确啊,就是在function里添加了一个匿名内部类对象,然后在对象里复写了抽象类的接口里的抽象方法,然后.show()调用啊.
其实与正常的实现接口中方法,再调用是一样的,只不过这是用于匿名对象一次性使用.因为只使用一次,所以弄一个匿名对象,而要实现接口,就必须复写接口中方法.所以采用这种方式,如果你不调用show()方法,那这个function方法岂不是完全没有意义.
        }        

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
其实下面这句这就是重写了父类的show()方法

new AbsDemo()
                 {
                         void show()
                         {
                                 System.out.println("x=="+x);
                         }
                 }.show();

.show之前的内容就是一个对象,(有点胖的带内容的对象)
是抽象父类的子类的对象。


也可以写成new 内部类名.show()  

就跟你新建个对象   在调用方法一样
只不过这么写简化书写

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
黄玉昆 + 1 + 3 很给力!

查看全部评分

回复 使用道具 举报
此处是AbsDemo 的匿名对象。相当于AbsDemo abs=new AbsDemo(); 然后调用abs.show();
  1. new AbsDemo()
  2.                 {
  3.                void show()
  4.                    {
  5.                      System.out.println("x=="+x);
  6.                         }
  7.                 }.show().
复制代码
回复 使用道具 举报
陈圳 发表于 2013-3-3 12:06
public void function()
        {
                new AbsDemo()

嗯。。。谢谢了,现在明白了。之前就是模糊。
回复 使用道具 举报
如果仍有问题,可以继续追问;若没有问题了,请及时将帖子分类改成【已解决】~

http://bbs.itheima.com/thread-37643-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马