Swift 继承
Swift继承
Swift中的继承是一种面向对象编程中非常重要的概念,它可以让我们创建一个新的类,并从现有的类中继承属性和方法。在Swift中,我们可以使用class关键字来定义一个类并实现继承。
定义一个继承类
我们可以使用冒号(:)来声明一个类继承自哪个类,例如:
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
class Student: Person {
var studentId: String
init(name: String, age: Int, studentId: String) {
self.studentId = studentId
super.init(name: name, age: age)
}
}
在上面的例子中,我们定义了一个Person类和一个Student类。Student类是通过继承Person类来实现的。Student类中还额外定义了一个studentId属性,并且通过调用super.init()方法来初始化父类的属性。
访问父类属性和方法
在子类中,我们可以使用super关键字来访问父类的属性和方法。例如,在上面的例子中,我们通过调用super.init()方法来初始化父类的属性。除此之外,还可以使用super关键字调用父类的方法,例如:
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func sayHello() {
print("Hello")
}
}
class Student: Person {
var studentId: String
init(name: String, age: Int, studentId: String) {
self.studentId = studentId
super.init(name: name, age: age)
}
override func sayHello() {
super.sayHello()
print("My name is \(name)")
}
}
在上面的例子中,我们在Student类中通过重写sayHello()方法来调用父类的sayHello()方法。在子类中如果我们需要调用父类的方法,则需要使用super关键字来调用。
重写父类方法
在Swift中,我们可以通过重写父类的方法来实现自己的行为。在子类中通过override关键字来进行重写,例如:
class Animal {
func makeSound() {
print("...")
}
}
class Dog: Animal {
override func makeSound() {
print("bark")
}
}
上面的例子中,我们定义了一个Animal类和一个Dog类,Dog类继承自Animal类。在Dog类中,我们重写了makeSound()方法,使其输出“bark”而不是父类中的“…”。
防止重写父类方法
在Swift中,如果我们希望防止某个方法被子类重写,则可以在父类中使用final关键字来修饰该方法。例如:
class Animal {
final func makeSound() {
print("...")
}
}
class Dog: Animal {
// 这里编译器会报错:'makeSound()' is inaccessible due to 'final' protection level
// override func makeSound() {
// print("bark")
// }
}
上面的例子中在Animal类中使用final关键字修饰makeSound()方法,这意味着在Dog类中无法重写该方法。
总结
继承是面向对象编程中很重要的概念,Swift中使用class和冒号(:)来实现继承。在子类中可以使用super关键字访问父类的属性和方法,如果需要重写父类的方法则可以使用override关键字。如果希望防止父类方法被重写,则可以使用final关键字。