黑马程序员技术交流社区

标题: 内部类的一个问题 [打印本页]

作者: xu6148152    时间: 2014-1-16 23:03
标题: 内部类的一个问题
class Outer
{
    void method()
     {
            new Object()
                 {
             public void show()
              {
              System.out.println("show run");
              }

         }.show();
      
     }
}

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


作者: 淡夜清风    时间: 2014-1-16 23:20
  new Object()
                 {
             public void show()
              {
              System.out.println("show run");
              }

         }
是个匿名内部类啊。。是Object的子类。。不管子类增加什么新的方法,父类才不会管你呢。
show()方法是这个匿名内部类新定义的方法,不是Object类的方法。更不是给Object添加临时的方法!
作者: november    时间: 2014-1-16 23:23
不是 给Object 添加临时方法,new Object()
                 {
             public void show()
              {
              System.out.println("show run");
              }

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

         }.show();
这个程序的意思是:Object的子类对象调用自己的方法。
作者: xu6148152    时间: 2014-1-16 23:27
淡夜清风 发表于 2014-1-16 23:20
new Object()
                 {
             public void show()

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

作者: xu6148152    时间: 2014-1-16 23:46
§傻、才乖 发表于 2014-1-16 23:38
当你new Object()后边加一组{}
就说明你已经有了一个object的子类对象,子类可以增加自己的特有方法,所以 ...

是啊,就因为是Object我才会产生疑问,如果是接口或者抽象类。就不会有这种疑问了。立马能想到是匿名内部类了。
作者: §傻、才乖    时间: 2014-1-16 23:49
那就好说了,new Object() {}就是子类的对象,这你知道
那么 子类就可以覆盖父类方法,也可以创建自己的特有方法,这你也知道吧

那应该就没疑问了吧

作者: xu6148152    时间: 2014-1-16 23:56
§傻、才乖 发表于 2014-1-16 23:49
那就好说了,new Object() {}就是子类的对象,这你知道
那么 子类就可以覆盖父类方法,也可以创建自己的特 ...

是的,我看到2L的说明,就已经知道是怎么回事了。就记得Object是所有类的父类。谢谢。

作者: 淡夜清风    时间: 2014-1-17 00:02
贺利英 发表于 2014-1-16 23:27
还有  new Object()
                 {
             public void show()

这里居然发现了个妹纸,,,哈哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2