黑马程序员技术交流社区

标题: 有关内部类实例,急需要知道什么意思? [打印本页]

作者: 崔利鹏    时间: 2012-11-14 13:39
标题: 有关内部类实例,急需要知道什么意思?
本帖最后由 崔利鹏 于 2012-11-14 14:59 编辑

程序总是报错提示,No enclosing instance of type Test2 is accessible. Must qualify the allocation with an enclosing instance of type Test2 (e.g. x.new A() where x is an instance of Test2).是什么意思,怎么错了
作者: 张利    时间: 2012-11-14 13:59
本帖最后由 张利 于 2012-11-14 14:19 编辑

没有可访问的内部类Test2的实例,必须分配一个合适的内部类Test2的实例(如x.new A(),x必须是Test2的实例。)
注意:由于实例创建是需要对象的,所以在同一个类中的静态方法不能直接访问非静态的内部类
需要先建立外部类的实例,再创建内部类的实例
作者: 奋斗的青春    时间: 2012-11-14 14:02
本帖最后由 吴愿涛 于 2012-11-14 14:06 编辑

意思是:没有可访问的内部类Test2的实例,必须分配一个合适的内部类Test2的实例(如x.new A(),x必须是Test2的实例。)

原因可能是你写的内部类是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以解决办法是将public class改为public static class.
或者改成上面的new Test().new Beans():
当然如果想看起来不这么怪异,也可以写成另外加一个方法来实例化这个内部类,再用外部类的实例来调用方法。


作者: 刘子义    时间: 2012-11-14 14:04
你应该是在静态方法(比如main方法)中调用了一个非静态的内部类造成的编译异常,试试把内部类声明为static。




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