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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xu6148152 中级黑马   /  2014-1-16 23:03  /  1579 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Outer
{
    void method()
     {
            new Object()
                 {
             public void show()
              {
              System.out.println("show run");
              }

         }.show();
      
     }
}

这里不太懂,Object是所有类的父类,那通过这个内部类就可以给Object添加临时的方法show()?

10 个回复

倒序浏览
  new Object()
                 {
             public void show()
              {
              System.out.println("show run");
              }

         }
是个匿名内部类啊。。是Object的子类。。不管子类增加什么新的方法,父类才不会管你呢。
show()方法是这个匿名内部类新定义的方法,不是Object类的方法。更不是给Object添加临时的方法!
回复 使用道具 举报
不是 给Object 添加临时方法,new Object()
                 {
             public void show()
              {
              System.out.println("show run");
              }

         }
这个整体 Object的子类然后在调用 show()方法
回复 使用道具 举报
不是的,你理解错了,这是内部类对象的特有方法,只有此子类有此方法,并不是给Object增加了一个方法的。匿名内部类对象的定义格式是:
new 父类(或者实现的方法)()
{
     这里面写此子类的自己特有的函数或者对父类方法的实现或者覆盖。而并不是给父类增加了方法。
};
上面就是匿名内部类对象的定义格式,使用匿名内部类的前提是必须继承一个类或者实现一个接口的。
回复 使用道具 举报
还有  new Object()
                 {
             public void show()
              {
              System.out.println("show run");
              }

         }.show();
这个程序的意思是:Object的子类对象调用自己的方法。
回复 使用道具 举报
淡夜清风 发表于 2014-1-16 23:20
new Object()
                 {
             public void show()

对了,我忘了任何类都会继承自Object.虽然没有class XXX extends Object。谢谢。这下明白了。
回复 使用道具 举报
当你new Object()后边加一组{}
就说明你已经有了一个object的子类对象,子类可以增加自己的特有方法,所以加一个show方法是没有问题的,
而想要调用这个方法也只能在对象后加.show来调用,因为是子类特有方法
就是用{}.show();的方式调用
我觉得一般最常见的就是new 接口或者抽象类(){}的方式
回复 使用道具 举报
§傻、才乖 发表于 2014-1-16 23:38
当你new Object()后边加一组{}
就说明你已经有了一个object的子类对象,子类可以增加自己的特有方法,所以 ...

是啊,就因为是Object我才会产生疑问,如果是接口或者抽象类。就不会有这种疑问了。立马能想到是匿名内部类了。
回复 使用道具 举报
那就好说了,new Object() {}就是子类的对象,这你知道
那么 子类就可以覆盖父类方法,也可以创建自己的特有方法,这你也知道吧

那应该就没疑问了吧
回复 使用道具 举报
§傻、才乖 发表于 2014-1-16 23:49
那就好说了,new Object() {}就是子类的对象,这你知道
那么 子类就可以覆盖父类方法,也可以创建自己的特 ...

是的,我看到2L的说明,就已经知道是怎么回事了。就记得Object是所有类的父类。谢谢。
回复 使用道具 举报
贺利英 发表于 2014-1-16 23:27
还有  new Object()
                 {
             public void show()

这里居然发现了个妹纸,,,哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马