[問題] static inner class

作者: kiwistar (神汁手)   2017-10-14 04:04:26
之前寫一些程式的時候,碰到需要獨立出一個類別的東西
往往都獨立初放在另一個檔案,放在同一個package裡面
這次把這些slave class移放到主要的class裡面變成inner class
就碰到了這個問題:
inner class到底要不要宣告為static
google一番後大致有了個了解
知道static與nonstatic inner class在使用外部class成員資格上的限制
以及本身可以創建的變數種類等等
但我還是有點困惑
主要是因為以前學static variable, method的時候
我們都知道static variable, method是在整個主程式底下只會有一份的
也就是不會因為所屬的class instance不同而改變
最常舉的例子就是圓周率
但static class就讓我有點困惑的是
雖然他是靜態的,但是可以instantiated
這個static是不是和variable以及method的static不太一樣?
作者: adrianshum (Alien)   2017-10-14 07:08:00
意思上不太一樣。簡單一句,inner class 能static 就static
作者: ssccg (23)   2017-10-14 10:05:00
static/nonstatic inner class的最大差別是在nonstaticinner class的instance一定要綁定一個外層class的instance使用外部成員的限制只是因為這點造成的自然結果這跟nonstatic method裡有this可以用一樣,nonstatic innerclass中可使用outer class的this,但相對的new的時候要先有outer class的instance,所以是從outer class變數(或this)後面加上new而static inner class除了存取權(跟outer class互相都能存取到private層級)外,就是個獨立class,instance間沒有關係兩者共通的用途是class本身可以設成private/protected控制要不要讓其他class用而已
作者: kiwistar (神汁手)   2017-10-14 11:22:00
感謝s大,所以說static inner class和獨立class差不多只差在static還可以取用outer class的private content, 獨立則不行,是嗎?
作者: Killercat (殺人貓™)   2017-10-16 13:27:00
其實只有一個原則「任何用不到上層class的inner class都該宣告為static」如此而已除非你把它當作參數傳進來

Links booklink

Contact Us: admin [ a t ] ucptt.com