与实例属性相较,静态属性是伪装成静态成员变量的静态成员函数。而静态成员函数,由于没有隐含的this形参,只能使用类型的静态成员变量和静态成员函数。

  请见下述示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package StaticProp

//多边形类
class Polygon {
private static var edge = 4 //边数
static mut prop edgeCount:Int64 {
get() { return edge }
set(v) { edge = v }
}

static prop internalAnglesSum:Int64 {
get() { (edge - 2) * 180 }
//内角和 = (边数 - 2) * 180
}
}

main(): Int64 {
println("${Polygon.edgeCount}边形内角和为${Polygon.internalAnglesSum}。")
Polygon.edgeCount = 6 //修改边数为4
print("${Polygon.edgeCount}边形内角和为${Polygon.internalAnglesSum}。")
return 0
}

上述程序的执行结果为:

1
2
4边形内角和为360。
6边形内角和为720。

🚩第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类型的任意实例。