## 面向对象 面向对象的三个基本特征是:封装,继承,多态。 ### 继承 继承,指在一个类基础上定义一个新类。新类可以使用原有类的数据和方法。 Swift只能继承自单一基类,但可以实现多个协议(protocol)。这类似于Java只能单继承,但可以实现多个接口,而不同于C++的多重继承。 在Swift中,只有类可以继承另一个类。其余类型,包括结构体和枚举都不能继承。但是,类,结构体,枚举都可以遵守协议,可以被扩展。 初始化方法 Swift中有一类特别的方法,被作为初始化方法,它们没有func前缀,并以init为方法名。这类似于Java对于初始化方法的处理,而不同于Objective-C中的初始化方法只是一个普通的方法。对于初始化方法的特殊处理可以在语言机制上保证初始化方法只被调用一次,这种机制在Objective-C中是不存在的。 Swift中初始化方法都必须保证所有实例变量都被初始化。Swift初始化方法要求特殊的初始化顺序。先保证当前类的实例变量被初始化,再调用父类的初始化方法完成父类实例变量的初始化。 Swift中,不加修饰的init方法被认为是designated初始化方法。Swift对designated初始化方法赋予了更特殊的地位,以保证的初始化方法中所有实例变量都被初始化: Swift编译器强制,designated初始化方法中给本类的所有非Optional实例变量赋值; 如果父类有desingated初始化方法,子类必须调用父类的designated方法,保证父类的实例变量也完成了初始化。 重写(overridding) Swift中可以通过添加final关键字,防止方法和属性被子类重写。 ### 封装 封装,指将从客观事物抽象得到的数据和行为组成一个有机的整体。在大部分面向对象语言中,就是抽象成“类”。类对外部隐藏其数据和方法实现细节,仅对外公开接口,控制对对象的数据的读写的访问级别。 类(class)和结构体(struct) 结构体(strut)是把相关数据块组合在一起的一种类型;结构体是值类型。 声明结构体 strut ```swift struct Town { } ``` 结构体内添加属性 ```swift struct Town { //存储属性,可以有默认值 var name = "温泉小镇" //名称 var population = 2300 //人口 } ``` 结构体实例方法 ```swift struct Town { var name = "温泉小镇" //名称 var population = 2300 //人口 func sayHello() { print("Hello! My name is \(name) ,population is \(population)") } } ``` [](http://3.bp.blogspot.com/-MfLioEJz5T0/VHgNpvyJ7TI/AAAAAAAAC1Y/JgTi1ElcK2I/s1600/Swift%2BCheat%2BSheet%2B-%2BOOP.png) 无标签