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

看板java作者 (shen)時間17年前 (2007/07/04 16:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/7 (看更多)
※ 引述《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)
文章代碼(AID): #16YrvHd_ (java)
討論串 (同標題文章)
文章代碼(AID): #16YrvHd_ (java)