黑马程序员技术交流社区

标题: 匿名内部类的问题 [打印本页]

作者: vaqh    时间: 2014-7-28 19:44
标题: 匿名内部类的问题
本帖最后由 vaqh 于 2014-7-29 23:03 编辑

class InnerTest
{
        public static void main(String[] args)
        {
                Object o = new Object()
                {
                        function(){}
                };
                o.function();
        }
}
以上代码的运行结果是什么?为什么呢?


作者: 怀念黑海岸    时间: 2014-7-28 19:51
貌似编译就过不了吧!!!
作者: vaqh    时间: 2014-7-28 19:55
怀念黑海岸 发表于 2014-7-28 19:51
貌似编译就过不了吧!!!

为什么呢
作者: 怀念黑海岸    时间: 2014-7-28 19:57
你应该是想调用InnerTest类中的内部类。这个内部类中有一个函数叫function();
你是想调用这个function()方法
可以这样子写:
class Test{       
        public static void main(String[] args)
        {
               new Object()
                {
                        void function(){
                                System.out.println("hello");
                                }
                }.function();
        }
}
作者: 怀念黑海岸    时间: 2014-7-28 20:01
    使用匿名内部类的原因是为了简化书写方便,而且内部类中的方法不要太多,太多的话你又要重新定义对象去调用,那他就失去了匿名函数的简化行,
new Object() {
                        void function(){
                                System.out.println("hello");
                                }
                }
这段语句其实运行的结果就是产生了一个匿名内部类,这个语句块后面的 .funciton()就是调用内部类中的方法。
作者: 怀念黑海岸    时间: 2014-7-28 20:37
vaqh 发表于 2014-7-28 19:55
为什么呢

首先,你的function函数没有对定义返回值,其次,你定义的object类对象中没有function方法,调用不成功。
你定义的Object o=new Object()对象引用没有指向这个匿名内部类,肯定报错了。
作者: vaqh    时间: 2014-7-28 22:01
怀念黑海岸 发表于 2014-7-28 19:57
你应该是想调用InnerTest类中的内部类。这个内部类中有一个函数叫function();
你是想调用这个function( ...

恩,谢谢
作者: 席杰    时间: 2014-7-28 23:17
学习一下!
作者: vaqh    时间: 2014-7-28 23:23
谢谢大家了
作者: 790324255a    时间: 2014-7-28 23:34
编译不能通过 前提Object要有function()方法
作者: 微小宝    时间: 2014-7-28 23:51
好厉害的样子!!
作者: huangxuanheng    时间: 2014-7-29 00:10
那不用.function()调用,会执行function吗?
作者: vaqh    时间: 2014-7-29 08:32
huangxuanheng 发表于 2014-7-29 00:10
那不用.function()调用,会执行function吗?

肯定不会啊
作者: 韩天雷    时间: 2014-7-29 08:45
{:3_53:}很有意思的样子
作者: 柳超    时间: 2014-7-29 09:35
你定义的方法是一个抽象方法!  不可能有运行结果!
作者: vaqh    时间: 2014-7-29 14:31
柳超 发表于 2014-7-29 09:35
你定义的方法是一个抽象方法!  不可能有运行结果!

抽象方法???不是吧
作者: huangxuanheng    时间: 2014-7-29 20:32
怀念黑海岸 发表于 2014-7-28 19:51
貌似编译就过不了吧!!!

应该编译会通过的,因为没有语法错误
作者: ssy1939    时间: 2014-7-29 22:58
编译失败,Object类中没有定义fuction方法,匿名内部类格式  new  父类或接口名(){复写父类或接口中的方法定义子类的内容};
作者: 柠萌不    时间: 2014-7-29 23:59
学习一下!
作者: 柳超    时间: 2014-8-2 07:40
vaqh 发表于 2014-7-29 14:31
抽象方法???不是吧

抽象方法:在类中没有方法体的方法,就是抽象方法
作者: vaqh    时间: 2014-8-2 08:13
柳超 发表于 2014-8-2 07:40
抽象方法:在类中没有方法体的方法,就是抽象方法

{ }不是方法体,是什么
作者: 柳超    时间: 2014-8-2 08:25
vaqh 发表于 2014-8-2 08:13
{ }不是方法体,是什么

..好吧!我错了
作者: vaqh    时间: 2014-8-2 14:05
柳超 发表于 2014-8-2 08:25
..好吧!我错了

哥们,要注意啊
作者: 南柯一梦    时间: 2014-8-2 14:16
编译不通过,建立Object子类对象用父类引用类型接收,只能使用父类的方法,而function在父类中没有定义
作者: 柳超    时间: 2014-8-2 15:46
vaqh 发表于 2014-8-2 14:05
哥们,要注意啊

学艺不精啊
作者: 烟海    时间: 2014-8-2 16:09
柳超 发表于 2014-8-2 15:46
学艺不精啊

是的啊。。。而且抽象类的抽象方法中,需要加abstract ,抽象类的类名,也要加abstract 才行。。。
作者: vaqh    时间: 2014-8-2 20:47
柳超 发表于 2014-8-2 15:46
学艺不精啊

没事,加油
作者: zhouqun    时间: 2014-8-2 21:50
你这个根本就不是匿名内部类啊 匿名内部类3个条件1,要有子父类之间的继承或者实现关系2,要有方法的重写3,父类的引用要指向子类的对象。你调用的function方法object类中是没有的啊,怎么实现匿名内部类呢?




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