Topic: 请教一个有关内部类的问题 |
Print this page |
1.请教一个有关内部类的问题 | Copy to clipboard |
Posted by: alexzlw Posted on: 2006-04-19 12:27 class Outer{ int out_i = 100; void test(){ Inner in =new Inner(); in.display(); } public static void main(String [] args){ Outer outer=new Outer(); outer.test(); } } class Inner{ Outer outer; void display(){ System.out.println("out_i is "+ outer.out_i); }} 我想在outer的外部访问他的成员变量out_i , 这样写的话编译能通过,但执行有错误;但如果这样 class Outer{ int out_i = 100; void test(){ Inner in =new Inner(this); in.display(); } public static void main(String [] args){ Outer outer=new Outer(); outer.test(); } } class Inner{ Outer outer; public Inner( Outer outer){ this.outer=outer; } void display(){ System.out.println("out_i is "+ outer.out_i); }} 在Inner函数里加了个构造函数就解决问题了,为什么呢,不太明白 ( 还有一种解决方法是把Inner移到Outer的内部去访问变量out_i ,这个我知道了) |
2.Re:请教一个有关内部类的问题 [Re: alexzlw] | Copy to clipboard |
Posted by: zcjl Posted on: 2006-04-19 13:44 1.根据你的代码看,Inner根本就不是Outer的内部类,只是两个类定义在同一个源文件而已。 2.假设把Inner移到Outer内部去定义,你访问out_i的方式也是错误的: System.out.println("out_i is "+ outer.out_i); 这里的outer虽然被声明为Inner的实例变量,却没有任何地方对它进行赋值,所以在上面的语句去访问它的属性,只会导致NullPointerException。不要被Outer类main方法中声明的 Outer outer=new Outer();所误导,这个是方法内部的局部变量,在main方法外(哪怕在Outer内部)都是无法访问到的。 3. 还有一种解决方法是把Inner移到Outer的内部去访问变量out_i ,这个我知道了也许你说的是如下这种正确使用Outer属性的方式: public class Outer { |
3.Re:请教一个有关内部类的问题 [Re: alexzlw] | Copy to clipboard |
Posted by: alexzlw Posted on: 2006-04-19 15:23 1 恩,贴子名字没取对 2 主要是想问一下为什么按照第二种方法修改后就是对的了, 能解释一下吗,谢谢 |
4.Re:请教一个有关内部类的问题 [Re: alexzlw] | Copy to clipboard |
Posted by: zcjl Posted on: 2006-04-19 17:59 class Outer { |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |