[问题] 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