Swift教程之继承详解
简介
在面向对象编程语言中,继承是一个重要的概念。它可以让一个类拥有另一个类的属性和方法,并且还可以扩展自己的功能。在Swift中,继承是通过class关键字来实现的。
继承的语法
一个类可以继承另一个类,通过在类名后面加上一个冒号":"以及被继承的类的名称,例如:
class SubClass: SuperClass {
// 代码
}
在这个例子中,SubClass
继承自SuperClass
。
重写方法和属性
在子类中,我们可以重写父类中的方法和属性。通过使用override
关键字来标识,例如:
class SuperClass {
func printName() {
print("SuperClass")
}
}
class SubClass: SuperClass {
override func printName() {
print("SubClass")
}
}
在这个例子中,SubClass
重写了SuperClass
中的printName
方法,并输出了不同的结果。注意,如果子类要重写父类中的方法或属性,需要保证它们的访问级别至少和父类中的一致。
调用父类的方法和属性
子类中可以通过super
关键字来调用父类中的方法和属性,例如:
class SuperClass {
var name: String = "SuperClass"
}
class SubClass: SuperClass {
override var name: String {
get {
return super.name
}
set {
super.name = newValue
}
}
}
在这个例子中,SubClass
重写了SuperClass
中的name
属性,并在访问器中通过super.name
来调用父类的name
属性。
示例: 苹果和梨的类继承
class Fruit {
var name: String
init(name: String) {
self.name = name
}
func printName() {
print("这是一种水果:\(name)")
}
}
class Apple: Fruit {
override func printName() {
print("这是一种苹果:\(name)")
}
}
class Pear: Fruit {
override func printName() {
print("这是一种梨子:\(name)")
}
}
let fruit = Fruit(name: "未知水果")
fruit.printName()
let apple = Apple(name: "红富士")
apple.printName()
let pear = Pear(name: "鸭梨")
pear.printName()
在这个例子中,Fruit
是一个父类,Apple
和Pear
是子类。它们都继承了Fruit
的属性和方法。通过重写printName
方法,Apple
和Pear
打印出了不同的结果。
示例: 整数数组的类继承
class IntegerArray {
var numbers: [Int]
init(numbers: [Int]) {
self.numbers = numbers
}
func printNumbers() {
print("整数数组: \(numbers)")
}
}
class EvenArray: IntegerArray {
override func printNumbers() {
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print("偶数数组: \(evenNumbers)")
}
}
class OddArray: IntegerArray {
override func printNumbers() {
let oddNumbers = numbers.filter { $0 % 2 == 1 }
print("奇数数组: \(oddNumbers)")
}
}
let integerArray = IntegerArray(numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
integerArray.printNumbers()
let evenArray = EvenArray(numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
evenArray.printNumbers()
let oddArray = OddArray(numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
oddArray.printNumbers()
在这个例子中,IntegerArray
是一个父类,EvenArray
和OddArray
是子类。它们都继承了IntegerArray
的属性和方法,但通过重写printNumbers
方法,EvenArray
和OddArray
输出了不同的结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Swift教程之继承详解 - Python技术站