swift final 关键字
2020-11-24 本文已影响0人
大斑马小斑马
final 关键的介绍 以及 列举 非常不建议 在项目中使用
class FinalKeyWordVC: ViewController {
override func viewDidLoad() {
view.backgroundColor = .lightGray
/** 关键字final(最终的) 标记的类不能被继承, 提高安全性,提高程序的可读性
* 1.final 修饰类,这个类就不能被继承; 如:String类、StringBuffer类、System类等
* 2.final 修饰方法:不能被重写; 如:Object类的getClass()
* 3.final 修饰属性,变为常量 属性(没有默认初始化的值);习惯上,常量用大写字符来写!
* final常量一旦确定后,就禁止再次复制!
* 4.变量用 static final +类型 来修饰,即为全局变量!
* 5.final修饰参数类型,eg:(final Other o){ //强制保护对象o不被new...,但其内部数据仍能修改
* final 用处一般都只有第三方库才会去用它,对于项目而言 我还没发现除了我 谁还在用 我强烈不建议用
*/
let c = C()
let d = D()
c.finalKeyFuction()
c.compareFinalKeyFuction()
d.compareFinalKeyFuction()
print("\(c.a),\(c.b),\(d.a),\(d.b)")
}
}
// MARK: final 修饰的类的讲解
final class A {
}
/// final 修饰的类不能被继承
//class B: A {
//
//}
class C {
var a:Int {
return 3
}
final var b:Int {
return 4
}
/// final 修饰的方法 子类无法重写
final func finalKeyFuction() {
print("final 修饰的方法 子类无法重写")
}
/// 非 final 修饰的方法 子类可重写
func compareFinalKeyFuction() {
print("非 final 修饰的方法 子类可重写")
}
}
class D: C {
/** D继承于C,C就是D的几类 ,D 就是C的派生类
* 如果继承基类的属性并且想重写它 必须这样写才可以不报错
* 别闲着没事找事 重写基类的属性了 真几把麻烦
*/
///
override var a: Int {
return 200
}
/// final 修饰的属性不能被继承
// override var b: Int {
// return 200
// }
override func compareFinalKeyFuction() {
print("子类重写了父类的方法")
}
}