与实例属性相较,静态属性是伪装成静态成员变量的静态成员函数。而静态成员函数,由于没有隐含的this形参,只能使用类型的静态成员变量和静态成员函数。
请见下述示例。
1 | package StaticProp |
上述程序的执行结果为:
1 | 4边形内角和为360。 |
🚩第4行:Polygon为多边形类。
🚩第5行:edge为私有的静态成员变量,按之前的讨论,静态成员变量属于类型对象,而非实例对象。
🚩第6 ~ 9行:静态属性edgeCount,通过这个属性,可以对静态成员变量edge进行取值和置值。
请读者注意,上述程序的结构出于教学需要而设计,在实践中并不妥当。
🚩第11 ~ 14行:静态属性internalAnglesSum(内角和)。请注意,该属性未使用mut修饰,故只能取值(get),不能置值。其取值函数按公式内角和 = (边数-2) × 180计算并返回多边形的内角和。
🚩第18行:
- Polygon.edgeCount事实上执行edgeCount静态属性的取值函数。
- Polygon.internalAnglesSum事实上执行internalAnglesSum静态属性的取值函数。
如执行结果第1行所见,4边形的内角和为360度。
🚩第19行:事实上执行edgeCount静态属性的置值函数,将边数修改为6。
🚩第20行:如执行结果第2行所见,6边形的内和角为720度。
不难看出,由于edgeCount和internalAnglesSum为静态属性,“属于”Polygon类型对象,因此,上述代码的执行不依赖于Polygon类型的任意实例。