标签:
在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。
下面看一个示例:
- final class Person { //声明为final,说明它是不能被继承的
-
- var name: String
-
- final var age: Int //定义的age属性
-
- final func description() -> String { //定义description实例方法
-
- return "\(name) 年龄是: \(age)"
-
- }
-
- final class func printClass() ->() { //定义printClass静态方法
-
- print( "Person 打印...")
-
- }
-
- init (name: String, age: Int) {
-
- self.name = name
-
- self.age = age
-
- }
-
- }
-
- class Student: Person { //编译错误
-
- var school: String
-
- convenience init() {
-
- self.init(name: "Tony", age: 18, school: "清华大学")
-
- }
-
- init (name: String, age: Int, school: String) {
-
- self.school = school
-
- super.init(name: name, age: age)
-
- }
-
- override func description() -> String { //编译错误 //试图重写description实例方法
-
- print("父类打印 \(super.description())")
-
- return "\(name) 年龄是: \(age), 所在学校: \(school)。"
-
- }
-
- override class func printClass() ->() { //编译错误 //试图重写printClass静态方法
-
- print( "Student 打印...")
-
- }
-
- override var age: Int { //编译错误 //试图重写age属性
-
- get {
-
- return super.age
-
- }
-
- set {
-
- super.age = newValue < 8 ? 8: newValue
-
- }
-
- }
-
- }
定义Student类,并声明为Person子类时,会报如下编译错误:
Inheritance from a finalclass ‘Person‘
定义的age属性也是final,那么在试图重写age属性时,会报如下编译错误:
Var overrides a ‘final‘var
定义description实例方法,它被声明为final,那么在试图重写description实例方法时,会报如下编译错误:
Instance method overridesa ‘final‘ instance method
定义printClass静态方法,它被声明为final,那么在试图重写printClass静态方法时,会报如下编译错误:
Class method overrides a‘final‘ class method
使用final可以控制我们的类被有限地继承,特别是在开发一些商业软件时,适当地添加final限制是非常有必要的。
Swift—final关键字-b
标签:
原文地址:http://www.cnblogs.com/isItOk/p/5454208.html