Re: [問題]inner class存取其外部成員的問題

看板java作者 (淺水中)時間17年前 (2007/07/04 08:21), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/7 (看更多)
※ 引述《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內的變數不能互用. 例如: { int a=0; { a=1; //ok } } ------------------ { int a=0; } { a = 1; //error cannot find the symbol } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.105.36
文章代碼(AID): #16YkW7AZ (java)
討論串 (同標題文章)
文章代碼(AID): #16YkW7AZ (java)