19 面向对象编程之继承与多态
在这一章中,我们将探讨 Swift 中的继承与多态这两个重要的面向对象编程特性。通过对继承与多态的理解,您将能够创建更具扩展性和重用性的代码。
继承
继承是面向对象编程的一个核心概念,允许一个类(子类)从另一个类(父类)中继承属性和方法。通过继承,子类可以重用父类的代码,并可以根据需要进行扩展和修改。
创建一个父类
首先,我们创建一个基本的 Animal
类作为我们的父类:
1 | class Animal { |
在这个 Animal
类中,我们定义了一个属性 name
和一个方法 makeSound()
,用于输出动物的叫声。
创建一个子类
接下来,我们创建一个 Dog
类,继承自 Animal
:
1 | class Dog: Animal { |
在 Dog
类中,我们重写了 makeSound()
方法,以提供特定于狗的叫声。override
关键字表明我们正在重写父类的方法。
使用继承
现在我们可以实例化 Dog
类并使用它:
1 | let myDog = Dog(name: "Buddy") |
通过继承,Dog
类成功地继承了 Animal
类的属性和方法,并进行了特化。
多态
多态是指同一操作在不同类的对象上具有不同的表现。多态允许您通过父类的引用来使用子类的对象,这在处理不同类型对象时非常有用。
父类引用指向子类对象
我们可以创建一个函数,这个函数接受一个 Animal
类型的参数,但允许传入任何实现了 Animal
的子类:
1 | func animalSound(animal: Animal) { |
在这个例子中,animalSound()
函数可以接收任何 Animal
类型的对象。不论是 Dog
还是其他子类,只要它们重写了 makeSound()
方法,便可以根据实际对象的类型输出相应的声音。
使用数组存储多态对象
多态在数组中同样表现得淋漓尽致。我们可以将不同的动物存储在同一数组中:
1 | let animals: [Animal] = [Dog(name: "Buddy"), Dog(name: "Rex")] |
这段代码将会输出:
1 | Buddy barks. |
小结
在这一章中,我们学习了如何通过 继承
创建新的类,并使用 多态
处理不同类型的对象。这些特性使得代码更具可重用性和可扩展性。在下一章中,我们将探讨初始化与析构的相关知识,进一步加深对面向对象编程的理解。
19 面向对象编程之继承与多态