封装
把隐藏属性、方法与方法实现细节的过程称为封装
目的:1.使用数据更加方便,2.为了数据保护。
隐藏属性和方法
使用访问控制修饰符将类和其属性方法封装起来。
修饰符:
- private:所修饰的属性或者方法只能在当前 Swift 源文件里可以访问,在别的文件里访问会出错.
- public:所修饰的属性或者方法对于引用了该文件或者模块的文件来讲,都能访问这些属性和方法。一般来说 public 的出现是为了 API 开发而设置。
- internal:默认的访问权限。所修饰的属性或者方法在源代码所在的整个模块都可以访问。如果是框架或者是库代码,则在整个框架内部可以访问,框架由外部代码所引用时,则不可访问。如果是 App 代码,在整个 App 内部可以访问。
public class Student {
public var name: String
internal var age: Int //只能在模块内部访问
private var score: Int //只能在本文件内被访问
init(name: String, age: Int, score: Int){
self.name = name
self.age = age
self.score = score
}
public func sayHi() {
print("hello everyone!")
}
private func getScore() {
print("My score is \(score)")
}
}
let student = Student(name: "Tom", age: 18, score: 99)
student.sayHi()
//student.getScore() //不能访问getScore 因为它是private类型的方法
多态
父类指向子类对象
class Animal {
func speak() {
print("Animal speak")
}
func eat() {
print("Animal eat")
}
func sleep() {
print("Animal sleep")
}
}
class Dog: Animal {
override func speak() {
print("Dog speak")
}
override func eat() {
print("Dog eat")
}
func run(){
print("Dog run")
}
}
class Cat: Animal {
override func speak() {
print("猫在喵喵叫")
}
}
var animal = Animal() //Animal
animal = Dog() //指向Dog对象 Dog
animal.speak() //Dog speak
animal.eat() //Dog eat
animal.sleep() //Animal sleep
var animal2: Animal = Cat()
animal2.speak() //猫在喵喵叫