应用场景:
使用final可以控制我们的类被有限地继承,特别是在开发一些商业软件时,为了避免封装好的SDK中的类 被继承的然后修改。适当地添加final限制是非常有必要的。
功能介绍:
在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。
下面 我们用 Swift 来演示一下 这些功能。
代码示例:
下面这是一个 final 修饰的 基类 Person
final class Person{
var name:String=""
final var age:Int=0
final func description() ->String{
return"\(name) age is:\(age)"
}
init(name:String,age:Int) {
self.name= name
self.age= age
}
}
下面 我们用一个 类 Student 继承自Person 类 然后重写这些方法
// 直接报错从继承关系来看
classStudent:Person{//编译错误试图继承自一个 final 修饰的类
varschool:String
convenienceinit(){
self.init(name:"DeLong", age:20, school:"浙江大学")
}
// 重写的 init 方法 也不行 报错
overrideinit(name:String, age:Int,school:String) {
self.school= school;
super.init(name: name, age: age)
}
//
overridefuncdescription () ->String{
print("super log")
return"\(name) 年龄是:\(age), 所在学校:\(school)。"
}
overrideclassfuncprintClass() ->() {//编译错误//试图重写printClass静态方法
print("Student 打印...")
}
//
overridevarage:Int{//编译错误 //试图重写age属性
get{
returnsuper.age;
}
set{
super.age= newValue <8?8:newValue
}
}
}
如下图所示。
重写set 和 get 也是的。