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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马周磊 中级黑马   /  2012-11-8 15:14  /  2558 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

interface Inter
{
        void method();
}

class Test
{
        static class Inner implements Inter
        {
                public void method()
                {
                          System.out.println("method run");
                 }
         static Inter function()
         {
                  return new Inner();
          }
        }
}

class InnerClassTest
{
        public static void main(string[] arge)
        {
                  Test.function().method();      // 这句代码,我没理解,毕老师的视频也看了几遍,还是有点糊涂。求解释。
        }
}

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

6 个回复

倒序浏览
Test.function()是返回一个内部类对象,然后Test.function().method()调用内部类实现的方法。
Test.function()相当于是创建了一个内部类对象。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先,Test.function()就是类调用里面的静态方法,没什么说的,主要的是这个方法返回的是一个类类型(Inner,而Inner实现了Inter,方法声明直接用Inter,此处用到了多态),既然得到了Inner的对象,那么直接调用它实现了的Inter里面的方法method(),整个过程就成了这句:Test.function().method();      
回复 使用道具 举报
应该是    Test.Inner.function().method();

外部类先调用内部类,接着调用内部类静态方法function,返回Inner对象,调用method

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为Test类里面的方法都是静态的,所以可以直接通过类名来调用方法。
而Test.function()调用后返回了一个内部类Inner的对象。因此 Test.function().method()这句话就相当于
new Inner().method().

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
   Test.function().method();        Test.这个代表的是类名 因为函数是静态的 所以可以用类名直接调用 Test.function() 类名.方法  就得到了inter这个对象   对象     就可以直接调用方法了

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
陈军 中级黑马 2012-11-15 10:45:20
7#
Test类的function()是静态的所以可以通过类名访问。
首先Test.function()这句返回一个Inner类型的实例对象,而Inner类有method()方法,所以就可以直接调用 method()   
Test.function().method();      这句话其实是下面这2句话的合并。
Inner in=Test.function();
in.method();      
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马