Re: [問題]inner class存取其外部成員的問題
※ 引述《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)
討論串 (同標題文章)