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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题:

第十三行的这句代码  Test.function().method();

为什么看到    Test.    就知道function()是一个静态的函数呢?

代码如下:

1    interface Inter
2    {
3            void method();
4   }

5     class Test
6     {
7           //补足代码,通过匿名内部类。
8    }
9  class InnerClassTest
10   {
11         public static void main(String[] args)
12        {
13                 Test.function.method();
14        }
15  }

7 个回复

倒序浏览
因为直接是类名调用的啊。静态成员可以类名调用或者对象调用两种方法呐
回复 使用道具 举报
调用方式:对象调用的方式和静态调用方式。第一个顾名思义,就是创建类的对象,来调用类中的方法等,第二个,静态调用方式,就是类名.方法直接调用类中的方法。
回复 使用道具 举报
陈雪琪 发表于 2013-6-29 18:45
因为直接是类名调用的啊。静态成员可以类名调用或者对象调用两种方法呐

对对,静态成员比非静态成员多一种调用方式。前面学的忘光了。。。

谢谢啦、
回复 使用道具 举报
L.I.F.E 发表于 2013-6-29 18:49
调用方式:对象调用的方式和静态调用方式。第一个顾名思义,就是创建类的对象,来调用类中的方法等,第二个 ...

嗯,类名.方法  静态成员才能这样调用。

多谢、
回复 使用道具 举报
能够通过类名直接调用方法,说明该方法是静态的,当类加载进内存的时候它就已经存在了。
通过调用 Test.function(),返回一个接口类型的对象,我们知道接口是不能创建对象的,所以我们只能返回接口的一个匿名子类对象,
最后才能调用method()方法.

代码如下:
  1. interface Inter
  2. {
  3.    void method();
  4. }

  5. class Test
  6. {
  7.     //补足代码,通过匿名内部类。
  8.         public static Inter function()
  9.         {
  10.                 return new Inter()        //返回接口匿名子类对象
  11.                 {
  12.                         public void method()
  13.                         {
  14.                                 System.out.println("method run");
  15.                         }
  16.                 };
  17.         };       
  18. }

  19. class InnerClassTest
  20. {
  21.     public static void main(String[] args)
  22.     {
  23.         Test.function().method();
  24.     }
  25. }
复制代码
回复 使用道具 举报
Test.function.method();       //Test是一个类名,通过(类名.成员)这种方法调用的只有静态成员哦。所以能判定function是静态的。
回复 使用道具 举报
王广亚 发表于 2013-6-30 10:03
Test.function.method();       //Test是一个类名,通过(类名.成员)这种方法调用的只有静态成员哦。所以 ...

嗯,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马