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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢洋 高级黑马   /  2013-3-17 00:14  /  2204 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢洋 于 2013-3-17 01:37 编辑

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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

倒序浏览
内部类出现在外部类的成员位置上时,当内部类被静态修饰,是可以直接为外部类类名调用  new 外部类名.内部类名();
要建内部类对象,必须建立外部类对象,这里指的是非静态内部类,但应在成员位置上。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
静态内部类是可以不需要建立外部类的对象的。静态内部类肯定属于内部类。内部类的概念是相对于外部类而言的。内部类就具备static的特性,相当于是一个外部定义的类;
回复 使用道具 举报
  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. }
复制代码
看了代码可能你的疑惑将解开

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
首先静态内部类一定是内部类,创建内部类对象时不管是静态的还是非静态的都会去实例化内部类(使用new关键字)。
普通内部类实例化:外部类.内部类 内部类对象 = new 外部类(参数列表).new 内部类(参数列表);
静态内部类实例化:外部类.内部类 内部类对象 = new 外部类.内部类(参数列表) ;
使用static定义的内部类就成为了外部类,外部可以直接使用。不过使用static定义的内部类只能访问外部类中的static属性或方法。
回复 使用道具 举报
百度的相关解释:
从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。

评分

参与人数 1黑马币 +12 收起 理由
谢洋 + 12 赞一个!

查看全部评分

回复 使用道具 举报
袁术森 发表于 2013-3-17 00:32
内部类出现在外部类的成员位置上时,当内部类被静态修饰,是可以直接为外部类类名调用  new 外部类名.内部 ...

请斑竹看看这个帖子的回复 我和其他同学的讨论
我不知自己的理解正确与否
需要被指点啊
争论的头都大了
关于类加载的问题
http://bbs.itheima.com/thread-41502-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马