黑马程序员技术交流社区

标题: 外部类的静态方法调用非静态内部类的问题? [打印本页]

作者: 刘煜    时间: 2012-6-12 16:39
标题: 外部类的静态方法调用非静态内部类的问题?
外部类的静态方法为什么不能直接调用该外部类的非静态内部类?
class Outer
{
        class Inner
        {
                void show()
                {
                        System.out.println("inner Show");       
                }       
        }
       
        public static void method()
        {
                new Inner().show();       
        }
}
作者: 唐辉辉    时间: 2012-6-12 16:44
静态里不能有非静态存在
作者: 王广丛    时间: 2012-6-12 16:53
其实这里我感觉这样说更容易理解:
main()方法是一个静态代码块,是不依附于类存在可,如你上面的代码,完全可以把main方法换到另外一个类中,
所以我们可以向main()方法在另外一个类中,如果要在这个main()方法中调用你定义的内部类,如果直接这样
new Inner();肯定是找不到报错的。这是就应该明白要先找到包含这个内部类的类,就是你的Demo类,然后再通过
这个类找到内部类Inner,体现在代码上就是,Inner in = new Domo().new Inner();
这个问题主要是理解静态的main()方法是程序的入口是,静态的独立于类存在的。这样就很容易理解为什么要通过外部类来new内部类了
希望能加技术分,急需分数报名考试
作者: 孙峰    时间: 2012-6-12 16:53
这个内部类在成员位置上,同时没有修饰为静态,你外部类中的静态方法当然无法访问,因为静态只能访问静态。
作者: 李月    时间: 2012-6-12 16:59
因为静态随着类的加载而加载,优先于对象存在。首先静态方法先会被加载到内存,对象都没有创建,不存在。静态不能加载。这是我的理解。

作者: 王超    时间: 2012-6-12 17:18
内部类在外部类的成员位置,而外部类的静态成员函数就不能访问内部类的非静态方法




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