黑马程序员技术交流社区

标题: 静态内部类可以说成内部类? [打印本页]

作者: 谢洋    时间: 2013-3-17 00:14
标题: 静态内部类可以说成内部类?
本帖最后由 谢洋 于 2013-3-17 01:37 编辑

有人说,要建内部类对象,必须建立外部类对象,那这里指的仅仅是非静态内部类?静态内部类直接可建对象,那静态内部类不算是内部类?

作者: 袁术森    时间: 2013-3-17 00:32
内部类出现在外部类的成员位置上时,当内部类被静态修饰,是可以直接为外部类类名调用  new 外部类名.内部类名();
要建内部类对象,必须建立外部类对象,这里指的是非静态内部类,但应在成员位置上。
作者: 黑马朱超    时间: 2013-3-17 01:08
静态内部类是可以不需要建立外部类的对象的。静态内部类肯定属于内部类。内部类的概念是相对于外部类而言的。内部类就具备static的特性,相当于是一个外部定义的类;
作者: 黑马-王鹏    时间: 2013-3-17 01:19
  1. class Outer
  2. {
  3.         private static  int x = 3;
  4.          class Inner//静态内部类
  5.         {
  6.                  void function()//静态内部类静态方法
  7.                 {
  8.                         System.out.println("innner :"+x);//省略Outr.this.
  9.                 }
  10.         }
  11.         static class Inner2
  12.         {
  13.                 void show()//静态内部类非静态方法
  14.                 {
  15.                         System.out.println("inner2 show");
  16.                 }
  17.         }
  18.         public static void method()
  19.         {
  20.                 //Inner.function();//静态可直接访问
  21.                 new Inner2().show();//静态访问非静态方法必须建立对象访问
  22.         }
  23. }
  24. class  InnerClassDemo2
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 /*Outer.method();//外部类直接访问其成员
  29.                 Outer.Inner.function();//直接访问静态内部类静态方法
  30.                 new Outer.Inner2().show();//直接访问静态内部类中的非静态成员。*/
  31.               Outer.Inner in = new Outer().new Inner();
  32.                 //当内部类定义在外部类的成员位置上,而且非私有,直接建立内部类对象访问
  33.                 in.function();
  34.         }
  35. }
复制代码
看了代码可能你的疑惑将解开
作者: android2050    时间: 2013-3-17 09:11
首先静态内部类一定是内部类,创建内部类对象时不管是静态的还是非静态的都会去实例化内部类(使用new关键字)。
普通内部类实例化:外部类.内部类 内部类对象 = new 外部类(参数列表).new 内部类(参数列表);
静态内部类实例化:外部类.内部类 内部类对象 = new 外部类.内部类(参数列表) ;
使用static定义的内部类就成为了外部类,外部可以直接使用。不过使用static定义的内部类只能访问外部类中的static属性或方法。

作者: 陈丽莉    时间: 2013-3-17 12:55
百度的相关解释:
从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。
作者: 袁术森    时间: 2013-3-17 13:22
袁术森 发表于 2013-3-17 00:32
内部类出现在外部类的成员位置上时,当内部类被静态修饰,是可以直接为外部类类名调用  new 外部类名.内部 ...

请斑竹看看这个帖子的回复 我和其他同学的讨论
我不知自己的理解正确与否
需要被指点啊
争论的头都大了
关于类加载的问题
http://bbs.itheima.com/thread-41502-1-1.html





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