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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑夜里的白猫 中级黑马   /  2013-5-28 10:14  /  1830 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑夜里的白猫 于 2013-5-30 09:36 编辑

interface Inter
{
        void method();
}

class Test
{
        

class Inner implements Inter//为什么这个类要定义static ,不定义会报错
        {
                public void method()
                {
                        System.out.println("method run");
                }
        }
        static   Inter  function()
        {
                return new Inner();
        }
        
}



class InnerClassTest
{
        public static void main(String[] args)
        {

                Test.function().method();
        }
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
因为你的function()方法是静态的,但是你调用的是一个非静态类的构造方法,所有就是非静态方法。而静态方法只能用来调用静态函数和变量的  所以会报错的。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
你定义的function()方法是静态的,如果类本身不是静态的话,情况就会变成类中的方法要先于类加载,这显然不可能,所以会报错。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
因为你的function()方 法是静态的,是随着类的加载而加载的, 所以访问非静态的内部类对象,必须是new Outer().new Inner();
  1. class Inner implements Inter//为什么这个类要定义static ,不定义会报错
  2.         {
  3.                 public void method()
  4.                 {
  5.                         System.out.println("method run");
  6.                 }
  7.         }
  8.         static   Inter  function()
  9.         {
  10.                 return new Test().new Inner();//看此处
  11.         }
  12.         
  13. }
复制代码
如果你的内部类是也是静态的,那么方法与内部类就是同一个等级了,就可以直接new Inner();
  1. static class Inner implements Inter//为什么这个类要定义static ,不定义会报错
  2.         {
  3.                 public void method()
  4.                 {
  5.                         System.out.println("method run");
  6.                 }
  7.         }
  8.         static   Inter  function()
  9.         {
  10.                 return /*new Test().*/new Inner();//看此处
  11.         }
  12.         
  13. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
袁梦希 + 2 神马都是浮云

查看全部评分

回复 使用道具 举报
static   Inter  function()//function方法是静态的,内部类规定,只要内部类中定义了静态成员,那么这个内部类必须是静态的
        {
                return new Inner();
        }

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
  1. interface Inter
  2. {
  3.         void method();
  4. }

  5. class Test
  6. {
  7.         static class Inner implements Inter//为什么这个类要定义static ,不定义会报错
  8.         {
  9.                 public void method()
  10.         {
  11.                         System.out.println("method run");
  12.         }
  13.     }
  14.     static Inter function()//静态方法
  15.     {
  16.                 return new Inner();//静态方法中调用了Inner(),所以Inner必须被static修饰
  17.     }   
  18. }

  19. class InnerClassTest01
  20. {
  21.         public static void main(String[] args)
  22.     {
  23.                 Test.function().method();
  24.     }
  25. }
复制代码
解释在注释中,看一下吧

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
小石头39910 发表于 2013-5-28 10:51
static   Inter  function()//function方法是静态的,内部类规定,只要内部类中定义了静态成员,那么这个 ...

明白了。谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马