码迷,mamicode.com
首页 > 编程语言 > 详细

Swift—final关键字-b

时间:2016-05-03 12:14:35      阅读:264      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!