黑马程序员技术交流社区

标题: 关于普通内部类和静态内部类的疑问,谢谢! [打印本页]

作者: 总统    时间: 2015-3-25 01:57
标题: 关于普通内部类和静态内部类的疑问,谢谢!
关于普通内部类和静态内部类的疑问,谢谢!





大家好!如上图所示,我的疑问是,普通内部类的实例化和静态内部类的实例化的区别就是一个括号吗?
普通内部类有括号,而静态内部类没括号。请大家解释一下,谢谢啦!





作者: lwj123    时间: 2015-3-25 08:08
是这样的:
普通的内部类对象的创建:Outter .Inner oi = new Outter().new Inner();
创建内部类对象首先需要要有外部类对象,所以先要有new Outter(),new Outter().new Inner(),表示Inner类是Outter的成员变量,通过new Outter的形式去调用。
而静态的内部类的创建:Outter .Inner oi  = new Outter.Inner();
静态的话,可以使用类名调用,Outter.Inner表示的就是内部类的全名
当要访问外部其他类中要访问内部类的非静态成员:new Outter.Inner().function(),通过对象来调用
当要访问外部其他类中要访问内部类的静态成员:Outter.Inner().function(),通过类来调用
作者: natsu647    时间: 2015-3-25 10:19
假设外部类Outter中有一个变量x
如果该变量x是非静态的,那么在主函数中就必须新建一个对象,再进行赋值:

        Outter o = new Outter();
        o.x = 3 ;

如果该变量x是静态的,那么在主函数可以直接赋值:

        Outter.x = 3 ;

普通内部类是非静态的,所以必须新建立一个对象,再建立内部类对象:

        Outter o = new Outter();
        Outter.Inner s1 = o.new Inner();
        Outter.Inner s2 = new Outter().new Inner();

静态内部类是静态的,可以直接建立:

        Outter .Inner s  = new Outter.Inner();

总结:静态成员不依赖对象。
作者: 总统    时间: 2015-3-25 12:03
lwj123 发表于 2015-3-25 08:08
是这样的:
普通的内部类对象的创建:Outter .Inner oi = new Outter().new Inner();
创建内部类对象首先需 ...

懂了,静态不用实例就可以用了是吧?谢谢啦!
作者: 总统    时间: 2015-3-25 12:04
natsu647 发表于 2015-3-25 10:19
假设外部类Outter中有一个变量x
如果该变量x是非静态的,那么在主函数中就必须新建一个对象,再进行赋值:
...

好,谢谢你。最后一句让我明白的,静态不用实例化就能用。




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