在面向对象编程中重用代码是很常见的。类的存在使您可以创建对象,而不必反复编写相同的变量和函数。
但是班级本身呢?有时课程也很相似。例如,一棵树有树枝、根和树干。这适用于榆树、橡树和黄松。
如果你在游戏中添加一棵树,你可以为几十棵树创建树的部分。但是创建一个树类并让其他树继承其属性会更容易。
在面向对象编程中有一个概念叫做“保持干燥”。DRY的意思是“不要重复自己”。如果你发现自己复制和粘贴了大量代码,你也会给很多错误带来空间。
假设您正在为一个新的Tamagotchi游戏编写代码。第一个虚拟宠物将是北极熊。所以在JavaScript/TypeScript中创建了一个名为PolarBear的类。
class PolarBear { private _weight: number = 990; c***tructor(weight: number = 0) { this._weight = weight } makeNoise() { c***ole.log("made a roar"); } eat() { c***ole.log("eats whatever it wants"); } sleep() { c***ole.log("got a good night's sleep"); } roam() { c***ole.log("wandered about aimlessly"); }}然后你的老板告诉你高层管理有了巨大的突破。他们意识到现在已经不是90年代了,他们可以在Tamagotchi中容纳5千个以上的内存。现在他们想要所有的熊。
你卷起袖子回去工作,创造熊类的副本。然后你的老板又来敲你的门。结果他们希望游戏更具教育性。现在你必须为每只宠物添加原产地信息。
你不再复制代码了。现在你要为所有八种熊更改数百行代码。错误就是这样发生的,错误就是这样被引入的。
当你磨磨蹭蹭的时候,你的老板又来了。现在上级管理层也希望所有的啮齿动物都参与进来。哦,还有一只长颈鹿。
你知道当你做了,他们会想要猴子或其他东西。一定有更好的办法。
与其创造下一代Tamogatchi,你可以一直玩现有的。
为了驯服你的虚拟动物园,你需要组织起来。继承通过向类添加父关系和子关系来帮助您安排类。
黑熊、灰熊和懒熊都是熊。熊、啮齿动物和猴子都是动物。这就是我们构建家谱的方法。
代码的一部分是这样的:
class Animal { private _weight: number; private _origin: string; c***tructor(weight: number = 0, origin: string = "") { this._weight = weight; this._origin = origin; } makeNoise(noise: string = "") { c***ole.log("made a noise that sounded like: " + noise); } eat(food: string = "") { c***ole.log("eats " + food); } sleep() { c***ole.log("got a good night's sleep"); } roam() { c***ole.log("wandered about aimlessly"); }}class Bear extends Animal { c***tructor(weight: number, origin: string) { super(weight, origin); } makeNoise(noise: string = "roar") { super.makeNoise(noise); } eat(food: string = "whatever it wants") { super.eat(food); }}class GrizzlyBear extends Bear { c***tructor(weight: number = 600, origin: string = "North America") { super(weight, origin); }}class Panda extends Bear { c***tructor(weight: number = 230, origin: string = "China") { super(weight, origin); } makeNoise() { super.makeNoise("squeek"); } eat() { super.eat("shoots and leaves"); }}您可以在TypeScript沙盒中玩代码。
这是一个很大的示例,但是代码非常简单,所有类都是Animal类的后代。你可以看到那只熊和那只动物。灰熊和熊猫扩大了熊的种类。Bear类创建默认的sound和eat函数。GrizzlyBear类使用这些默认函数,但Panda没有。
换句话说,GrizzlyBear类不会重写Bear函数。由于GrizzlyBear扩展了Bear,它将自动使用Bear定义的函数。但由于Panda重写了makeNoise和eat函数,因此它将使用这些函数。
为了弄清楚一个类是否真的应该扩展另一个类,您可以问问自己它们之间是否存在“is-a”或“has-a”关系。
这个例子有点简单,但是在处理实际类时,它会非常有用。
准备好应用你所学的了吗?
继承不仅仅是组织良好的代码。它是面向对象编程的核心部分。继承有助于简化对象之间的通信。它允许更高级的面向对象设计,比如多态性。您可以从TypeScript文档中了解有关继承的更多信息。
关键区别——oop中的多态与继承 面向对象程序设计(OOP)是软件开发中常用的方法。许多编程语言支持面向对象编程。面向对象编程是一种使用类和对象设计程序的方法。OOP中的类是创建对象的蓝图。类具有属性和方法。对...
继承(inheritance)和java接口(interface in java)的区别 Java是Sun Microsystems公司开发的一种编程语言。Java可以用来开发各种应用程序。它是一种支持面向对象、结构化等多种范式的语言,Java的主要优点是支持面向对象编程(OOP)。程序...
...容之前声明,尽管方法可以是空的。 构造函数和方法的继承 构造函数不是子类继承的,因为它们不是类的成员。但是,可以从子类调用超类(父类)的构造函数。另一方面,方法由子类继承以提供代码的可重用性。 构造函数和...
...在面向对象编程中,有两种基本的方法来建立这些关系:继承和组合。实现继承是关联类的一种方法,但是OOP提供了一种新的类之间的关系,称为组合。通过在新类和现有类之间建立关系,新类可以从一个或多个现有类继承或嵌...
...3.OOP和POP的区别–主要区别比较 关键术语 抽象、封装、继承、OOP、POP、多态性、编程范式 什么是哦(oop)? OOP(面向对象编程)允许程序员使用对象来建模真实世界的场景。对象是具有状态和行为的任何实体。它是一个类的实例...
...管理系统。程序员可以在OODBMS中使用面向对象的概念,如继承、多态、封装和数据库功能,如原子性、一致性、隔离性和持久性。这些数据库提供了诸如系统可扩展性、代码可重用性和可维护性等优点。 Figure 2: OOP Objects OODBMS与...
...中使用它们。 此外,可以实现面向对象的编程概念,如继承、抽象、封装和多态性以及结构化编程概念,如选择(IF,EASE),重复结构(用于、做、而等)C++等。此外,这种语言允许动态内存分配。程序员可以通过调用free()...
...我们可以使用C++实现面向对象编程概念,如封装、多态、继承等。它还提供了一个称为标准模板库(STL)的库。因此,程序员可以在程序中使用该库中可用的函数。 C++是一种基于编译器的语言。编译器将整个源代码转换为机器...