java中为什么在主函数中创建外部类对象可以,创建内部类对象就失败了呢?2类不都是非静态的吗?

如题所述

public class OuterClass {

    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        InnerClass innerClass = outerClass.new InnerClass();
        StaticInnerClass staticInnerClass = new StaticInnerClass();
    }

    public void foo() {
        InnerClass innerClass = new InnerClass();
        StaticInnerClass staticInnerClass = new StaticInnerClass();
    }

    public class InnerClass {

    }

    public static class StaticInnerClass {

    }
}

了解以下几点:


1:非静态内部类,必须有一个外部类的引用才能创建。


2:在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。


3:在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。


4:静态内部类,不需要外部类引用就可以直接创建。


5:同时静态的内部类,也不能直接访问外部类的非静态方法。


6:由此可以推测,非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-06
对main方法而言,虽然写在类中,它是游离于任何类之外的(就跟C++一样,单独一个main方法),因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问
第2个回答  2013-08-06
主函数是程序的入口,在里面创建外部类对象是可以直接调用的,类分静态和非静态,具体要看怎么定义该类。
第3个回答  2013-08-06
main是静态的,你声明的内部类是非静态的,所以不可以。
相似回答