作者losesong (shen)
看板java
标题Re: [问题]inner class存取其外部成员的问题
时间Wed Jul 4 16:46:08 2007
※ 引述《calais007 (浅水中)》之铭言:
: ※ 引述《losesong (shen)》之铭言:
: : 大家好
: : 小弟在练习使用匿名的inner class的时候遇到了点问题
: : 请大家指点迷津一下
: : 当我在inner class中去存取其外部class的某个field时
: : 若这个field在外部class的建构式中才去宣告,那编译时就会出现错误讯息
: : 讯息内容是cannot find symbol,而该symbol就是指那个field
: : 程式码的大略示意图如下:
: : public class OuterClass {
: : public OuterClass() {
: : ClassA refA = new ClassA(); //ClassA有一个我想用到的methodA
: : }
: : InnerClass inner = new InnerClass() {
: : public void innerMethod() {
: : refA.methodA(); //此处发生编译错误:cannot find symbol,symbol:varible refA
: : }
: : };
: : }
: : ===========================换个方法===================================
: : 但是,假如我在建构式之外先宣告refA,进了建构式再进一步将它指派给ClassA,
: : 此时就可通过编译
: : 程式码的大略示意图如下:
: : public class OuterClass {
: : ClassA refA;
: : public OuterClass() {
: : refA = new ClassA(); //ClassA有一个我想用到的methodA
: : }
: : InnerClass inner = new InnerClass() {
: : public void innerMethod() {
: : refA.methodA(); //这一次通过编绎了,why??
: : }
: : };
: : }
: : 想请教各位,为什麽我在建构式之外先宣告过,就不会编译错误了呢??
: : 或是请大家指点我一下,该去查什麽相关的资料,可以解释这个现象呢??
: : 谢谢各位~
: 这个是scope的问题
: 外层的block宣告的变数可以给内层的block用
: 同层的block内的变数不能互用.
:
谢谢你的回答
但是我觉得这样解释好像怪怪的
因为我的问题是出在:refA如果到了建构式才去宣告并指派一个物件给它
这样情况下,内部类别去存取refA才会出现compile error
或者calais板友的意思是说,inner class已经视为另一块block,所以才会不能取用??
但是我看书上是说,inner class(非static),可以存取外部class的成员
似乎跟block没有关系??
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.129.62.37
※ 编辑: losesong 来自: 140.129.62.37 (07/04 16:46)
※ 编辑: losesong 来自: 140.129.62.37 (07/04 16:48)