首页 > 编程语言 > 详细

Swift—final关键字-b

时间:2016-05-03 12:14:19      阅读:241      评论:0      收藏:0      [点我收藏+]

在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。

下面看一个示例:

  1. final class Person { //声明为final,说明它是不能被继承的      
  2.   
  3.     var name: String      
  4.   
  5.     final var age: Int    //定义的age属性      
  6.   
  7.     final func description() -> String {  //定义description实例方法  
  8.   
  9.         return "\(name) 年龄是: \(age)"  
  10.   
  11.     }      
  12.   
  13.     final class func printClass() ->() {  //定义printClass静态方法  
  14.   
  15.         print( "Person 打印...")  
  16.   
  17.     }      
  18.   
  19.     init (name: String, age: Int) {  
  20.   
  21.         self.name = name  
  22.   
  23.         self.age  = age  
  24.   
  25.     }  
  26.   
  27. }   
  28.   
  29. class Student: Person {                            //编译错误      
  30.   
  31.     var school: String      
  32.   
  33.     convenience init() {  
  34.   
  35.         self.init(name: "Tony", age: 18, school: "清华大学")  
  36.   
  37.     }      
  38.   
  39.     init (name: String, age: Int, school: String) {  
  40.   
  41.         self.school = school  
  42.   
  43.         super.init(name: name, age: age)  
  44.   
  45.     }      
  46.   
  47.     override func description() -> String {         //编译错误    //试图重写description实例方法  
  48.   
  49.         print("父类打印 \(super.description())")  
  50.   
  51.         return "\(name) 年龄是: \(age), 所在学校: \(school)。"  
  52.   
  53.     }      
  54.   
  55.     override class func printClass() ->() {      //编译错误  //试图重写printClass静态方法  
  56.   
  57.         print( "Student 打印...")  
  58.   
  59.     }      
  60.   
  61.     override var age: Int {                        //编译错误 //试图重写age属性  
  62.   
  63.     get {  
  64.   
  65.         return super.age  
  66.   
  67.     }  
  68.   
  69.     set {  
  70.   
  71.         super.age = newValue 8 ? 8: newValue  
  72.   
  73.     }  
  74.   
  75.     }  
  76.   
  77. }  

 

 

 

 

 

定义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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!