亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

求大神解答,為啥按照靜態內部類的方法編譯,編譯器會提示錯誤

在使用eclipse進行編譯時,編譯器一直提示錯誤,但是編譯方法是正確的,為啥編譯器會提示錯誤?求大神解答

http://img1.sycdn.imooc.com//58db28e800010ee807020466.jpg

正在回答

3 回答

靜態內部類必須通過new 外部類().成員的方式訪問非靜態成員;

比如你的12行代碼要這樣寫:syso("訪問外部類中的成員b:" + new SOuter().b );

2 回復 有任何疑惑可以回復我~
#1

逆風落葉

少了一個2 new SOuter2().b
2017-03-29 回復 有任何疑惑可以回復我~
#2

小瘦學Java 提問者 回復 逆風落葉

大神,那這句話怎么去理解呢?如果外部類的靜態成員與內部類的成員名稱相同,可以通過“類名.靜態成員”訪問外部類的靜態成員?
2017-03-29 回復 有任何疑惑可以回復我~
#3

逆風落葉 回復 小瘦學Java 提問者

就是成員名稱相同的情況下,可以用類名.成員名訪問成員。。。你那句話太繞了
2017-03-29 回復 有任何疑惑可以回復我~
#4

逆風落葉 回復 小瘦學Java 提問者

就是成員名稱相同的情況下,可以用類名.成員名訪問成員。。。你那句話太繞了
2017-03-29 回復 有任何疑惑可以回復我~
#5

小瘦學Java 提問者 回復 逆風落葉

(*^__^*) 嘻嘻……,這個是慕課老師寫的,我是屌絲來的,悟性比較低,那么在這個代碼中,他們都有相同的成員變量:int b ;老師給的案例也是直接為:System.out.println("訪問外部類中的b:"+SOuter.b);但是,我在編譯器也出現錯誤,是我把這個理解錯誤了嗎?
2017-03-30 回復 有任何疑惑可以回復我~
查看2條回復

你外部的b不是靜態變量

0 回復 有任何疑惑可以回復我~
#1

小瘦學Java 提問者

對的,我現在學完第二季,也理解了,謝謝大神
2017-04-19 回復 有任何疑惑可以回復我~

你對成員變量b用了private修飾,導致該變量不能被任何實例對象引用,針對你的問題,有兩種改法:

  1. ?將b用public static修飾,變成靜態成員變量,這時就可以用SOuter2.b來引用它了

  2. 將SOuter2.b改為new SOuter2().b,這樣做的實質是通過new SOuter2()產生了一個SOuter2類的匿名對象,然后再通過這個匿名對象去引用成員變量b,為了讓b能夠被對象引用,你還需要將b改成public修飾

1 回復 有任何疑惑可以回復我~
#1

小瘦學Java 提問者

在第二種方法中,可以直接添加一個(+new SOuter().b);也可以
2017-04-04 回復 有任何疑惑可以回復我~
#2

標準與或式 回復 小瘦學Java 提問者

哦,對,是我忘記了,內部類對象確實可以訪問外部類的私有成員
2017-04-04 回復 有任何疑惑可以回復我~
#3

小瘦學Java 提問者 回復 標準與或式

哈哈,好棒棒,很感謝你
2017-04-04 回復 有任何疑惑可以回復我~
#4

標準與或式 回復 小瘦學Java 提問者

也不對,你這也不是內部類,應該是因為在類的內部訪問成員變量b,所以private權限依然允許被訪問,如果在類的外部就無法訪問了
2017-04-04 回復 有任何疑惑可以回復我~
#5

標準與或式 回復 小瘦學Java 提問者

額,你這回復的好快,我還沒來得及改正自己的錯誤
2017-04-04 回復 有任何疑惑可以回復我~
查看2條回復

舉報

0/150
提交
取消

求大神解答,為啥按照靜態內部類的方法編譯,編譯器會提示錯誤

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號