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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 请叫我马里奥 中级黑马   /  2013-9-28 12:17  /  1373 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 请叫我马里奥 于 2013-9-30 15:06 编辑

class Test
{
     static void function()
     {
            class Inner
           {
                    public void method()
                   {
                       System.out.println("hahah");
                   }
           }
    }
}
public class demo1 {
         public static void main(String[] args)
         {

       }
}
能不能再main方法中调用内部类Inner中的method方法,如果可以怎么调用?

评分

参与人数 1技术分 +1 收起 理由
潘才新 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
内部类只能在当前类中调用,不可能跨过当前类直接调用内部类!

调用内部类的方法是当前类在构造器将内部类实例出来,然后外部类通过实例当前类调用了此内部类的构造器或方法

评分

参与人数 1黑马币 +3 收起 理由
潘才新 + 3

查看全部评分

回复 使用道具 举报
可以啊,用反射。
  1. public static void main(String[] args) throws Exception{
  2.                  Test t = new Test();
  3.                  Class c =  t.getClass().getClassLoader().loadClass("Test$$1Inner");
  4.                  
  5.                  Method m = c.getMethod("method", null);
  6.                  m.invoke(c.newInstance(), null);
  7.          }
复制代码
Test$1Inner:这个是生成内部类字节码对象的名称,用类加载器去加载这个类,之后再用到反射的原理 就可以了。不过内部类一般都是在在外部类中new个对象的,或是你的方法中实例化。像你这么写的很少啊。

评分

参与人数 1技术分 +1 收起 理由
潘才新 + 1

查看全部评分

回复 使用道具 举报
张慧 发表于 2013-9-28 13:57
可以啊,用反射。Test$1Inner:这个是生成内部类字节码对象的名称,用类加载器去加载这个类,之后再用到反射 ...

用反射啊,我还没学到呢..都看不懂。不过还是要谢谢你了
回复 使用道具 举报
HM马强 发表于 2013-9-28 12:27
内部类只能在当前类中调用,不可能跨过当前类直接调用内部类!

调用内部类的方法是当前类在构造器将内部类 ...

我大概明白了内部类该杂用了,谢谢你哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马