19 面向对象编程之继承与多态

在这一章中,我们将探讨 Swift 中的继承与多态这两个重要的面向对象编程特性。通过对继承与多态的理解,您将能够创建更具扩展性和重用性的代码。

继承

继承是面向对象编程的一个核心概念,允许一个类(子类)从另一个类(父类)中继承属性和方法。通过继承,子类可以重用父类的代码,并可以根据需要进行扩展和修改。

创建一个父类

首先,我们创建一个基本的 Animal 类作为我们的父类:

1
2
3
4
5
6
7
8
9
10
11
class Animal {
var name: String

init(name: String) {
self.name = name
}

func makeSound() {
print("\(name) makes a sound.")
}
}

在这个 Animal 类中,我们定义了一个属性 name 和一个方法 makeSound(),用于输出动物的叫声。

创建一个子类

接下来,我们创建一个 Dog 类,继承自 Animal

1
2
3
4
5
class Dog: Animal {
override func makeSound() {
print("\(name) barks.")
}
}

Dog 类中,我们重写了 makeSound() 方法,以提供特定于狗的叫声。override 关键字表明我们正在重写父类的方法。

使用继承

现在我们可以实例化 Dog 类并使用它:

1
2
let myDog = Dog(name: "Buddy")
myDog.makeSound() // 输出: Buddy barks.

通过继承,Dog 类成功地继承了 Animal 类的属性和方法,并进行了特化。

多态

多态是指同一操作在不同类的对象上具有不同的表现。多态允许您通过父类的引用来使用子类的对象,这在处理不同类型对象时非常有用。

父类引用指向子类对象

我们可以创建一个函数,这个函数接受一个 Animal 类型的参数,但允许传入任何实现了 Animal 的子类:

1
2
3
4
5
6
func animalSound(animal: Animal) {
animal.makeSound()
}

let myDog2 = Dog(name: "Rex")
animalSound(animal: myDog2) // 输出: Rex barks.

在这个例子中,animalSound() 函数可以接收任何 Animal 类型的对象。不论是 Dog 还是其他子类,只要它们重写了 makeSound() 方法,便可以根据实际对象的类型输出相应的声音。

使用数组存储多态对象

多态在数组中同样表现得淋漓尽致。我们可以将不同的动物存储在同一数组中:

1
2
3
4
5
let animals: [Animal] = [Dog(name: "Buddy"), Dog(name: "Rex")]

for animal in animals {
animalSound(animal: animal)
}

这段代码将会输出:

1
2
Buddy barks.
Rex barks.

小结

在这一章中,我们学习了如何通过 继承 创建新的类,并使用 多态 处理不同类型的对象。这些特性使得代码更具可重用性和可扩展性。在下一章中,我们将探讨初始化与析构的相关知识,进一步加深对面向对象编程的理解。

19 面向对象编程之继承与多态

https://zglg.work/swift-lang-zero/19/

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论