黑马程序员技术交流社区

标题: 内部类的调用疑问!求解答。 [打印本页]

作者: 黑马周磊    时间: 2012-11-8 15:14
标题: 内部类的调用疑问!求解答。
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();      // 这句代码,我没理解,毕老师的视频也看了几遍,还是有点糊涂。求解释。
        }
}

作者: 杨政    时间: 2012-11-8 15:20
Test.function()是返回一个内部类对象,然后Test.function().method()调用内部类实现的方法。
Test.function()相当于是创建了一个内部类对象。
作者: 田建    时间: 2012-11-8 15:21
首先,Test.function()就是类调用里面的静态方法,没什么说的,主要的是这个方法返回的是一个类类型(Inner,而Inner实现了Inter,方法声明直接用Inter,此处用到了多态),既然得到了Inner的对象,那么直接调用它实现了的Inter里面的方法method(),整个过程就成了这句:Test.function().method();      
作者: 李刚    时间: 2012-11-8 15:54
应该是    Test.Inner.function().method();

外部类先调用内部类,接着调用内部类静态方法function,返回Inner对象,调用method
作者: jerry2627    时间: 2012-11-8 16:58
因为Test类里面的方法都是静态的,所以可以直接通过类名来调用方法。
而Test.function()调用后返回了一个内部类Inner的对象。因此 Test.function().method()这句话就相当于
new Inner().method().
作者: 惠晖    时间: 2012-11-8 17:54
   Test.function().method();        Test.这个代表的是类名 因为函数是静态的 所以可以用类名直接调用 Test.function() 类名.方法  就得到了inter这个对象   对象     就可以直接调用方法了
作者: 陈军    时间: 2012-11-15 10:45
Test类的function()是静态的所以可以通过类名访问。
首先Test.function()这句返回一个Inner类型的实例对象,而Inner类有method()方法,所以就可以直接调用 method()   
Test.function().method();      这句话其实是下面这2句话的合并。
Inner in=Test.function();
in.method();      




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