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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

外部类的静态方法为什么不能直接调用该外部类的非静态内部类?
class Outer
{
        class Inner
        {
                void show()
                {
                        System.out.println("inner Show");       
                }       
        }
       
        public static void method()
        {
                new Inner().show();       
        }
}

5 个回复

倒序浏览
静态里不能有非静态存在
回复 使用道具 举报
其实这里我感觉这样说更容易理解:
main()方法是一个静态代码块,是不依附于类存在可,如你上面的代码,完全可以把main方法换到另外一个类中,
所以我们可以向main()方法在另外一个类中,如果要在这个main()方法中调用你定义的内部类,如果直接这样
new Inner();肯定是找不到报错的。这是就应该明白要先找到包含这个内部类的类,就是你的Demo类,然后再通过
这个类找到内部类Inner,体现在代码上就是,Inner in = new Domo().new Inner();
这个问题主要是理解静态的main()方法是程序的入口是,静态的独立于类存在的。这样就很容易理解为什么要通过外部类来new内部类了
希望能加技术分,急需分数报名考试

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 回答好才有分的,哥~~

查看全部评分

回复 使用道具 举报
这个内部类在成员位置上,同时没有修饰为静态,你外部类中的静态方法当然无法访问,因为静态只能访问静态。
回复 使用道具 举报
因为静态随着类的加载而加载,优先于对象存在。首先静态方法先会被加载到内存,对象都没有创建,不存在。静态不能加载。这是我的理解。
回复 使用道具 举报
内部类在外部类的成员位置,而外部类的静态成员函数就不能访问内部类的非静态方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马