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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山西_李帅 中级黑马   /  2013-4-21 19:17  /  1804 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 山西_李帅 于 2013-4-21 23:10 编辑

当内部类定义在局部位置上时。怎么去访问内部类?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
还是和内部类定义在成员上一样访问, Outer.Inner() ,只是内部类在局部位置时,访问局部变量必须是final修饰的最终变量。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘学明    于 2013-4-21 19:32 编辑

内部类的各种访问规则 请看如下:

1.内部类可以直接访问外部类中的成员,包括私有。格式:外部类名.this。
2.外部类要访问内部类,必须建立内部类对象。
3.当内部类定义在成员位置上,并且是非私有的情况下,可以在外部其他类直接建立内部类对象。格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象。
4.当内部类定义在成员位置上,就可以被成员修饰符所修饰。 比如,private:将内部类在外部类中进行封装。static:内部类就具备static的特性。
5.当内部类被static修饰后,只能直接访问外部类中的static成员。这时出现了访问局限。
6.在外部其他类中,直接访问static内部类的非静态成员,格式为:new Outer.Inner().function();
7.在外部其他类中,直接访问static内部类的静态成员,格式为:Outer.Inner.function();
8.注意:当内部类中定义了静态成员,该内部类必须是static的。 当外部类中的静态方法访问内部类时,内部类也必须是static的。
9.内部类定义在局部时,不可以被成员修饰符修饰。可以直接访问外部类中的成员,因为还持有外部类中的引用。但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 山西_李帅 于 2013-4-21 23:10 编辑

谢谢,明白了。 我重新看了遍。
当内部类定义在成员位置上时,外部类名.内部类名 引用 = new 外部类名().new内部类名();
当内部类定义在局部位置上时,外部类名.内部类名 引用 = new 外部类名.内部类名();
如果内部类定义在局部位置上,它想要访问局部变量,那么局部变量就必须用final修饰;
回复 使用道具 举报
如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
本帖最后由 gerenvip 于 2013-4-21 22:47 编辑

外部其他类调用一个类的外部类分为非静态内部类函数,静态内部类非静态函数,静态内部类静态函数

在外部其他类中访问非静态内部类函数访问方式是

Outer.Inner d = new Outer().new Inner(); 用变量d调用内部类的方法

在外部其他类中如何直接访问静态内部类中的非静态成员呢?

Outer.Inner d = new Outer.Inner();用变量d调用内部类的方法

或者new Outer.Inner().function();

在外部其他类中如何直接访问静态内部类中的静态成员呢?
直接访问 Outer.Inner.function();

注意:当内部类中定义了静态成员,该内部类必须是静态的。
  当外部类中的静态方法访问内部类时,内部类也必须是静态的。
回复 使用道具 举报
可以直接访问局部成员,但是局部成员要用final修饰。注意:局部内部类不能用private和static修饰
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马