继承Inheritance是面向对象编程的基石之一它解决的核心问题是“如何高效地描述事物之间的共性与差异”。在没有继承的情况下如果你要创建Dog和Cat类你必须在每个类里都写一遍name、age等属性以及eat()、sleep()等方法。这会导致大量的代码重复Redundancy。以下是继承的主要意义1. 代码复用减少冗余继承允许你创建一个“基类”如Animal将所有动物共有的属性如名字、年龄和行为如吃、睡定义在里面。子类如Dog和Cat只需通过extends关键字就能复用这些代码而不需要重复编写。“爸爸有的儿子直接继承”省去了大量的体力劳动。2. 建立层级关系逻辑清晰继承不仅仅是代码复用更是为了建立一种逻辑上的“本质是一个is-a...”关系。Dog是一个AnimalCat是一个Animal这种清晰的架构让系统的逻辑结构更符合人类对现实世界的认知代码的可读性和维护性会大大提升。3. 实现“基石”功能为多态铺路没有继承多态就失去了基础。继承是多态的前提——因为Dog和Cat都是Animal的子类所以它们才能被当作Animal来统一对待。继承定义了族谱多态通过这个族谱实现统一指挥。4. 便于功能扩展当你需要增加新功能时可以直接在父类中添加方法所有的子类会自动获得该功能或者你可以在子类中重写Override父类的方法使其拥有独特的行为例如猫和狗吃的东西不一样通过继承及重写既保留了“吃”这个动作的共性又展现了“吃什么”的个性。用一个生活化的比喻假设有一家汽车工厂没有继承你要造轿车、货车、跑车。每一款车你都要从零开始设计引擎、轮子、方向盘一旦引擎出问题了你要去每一款车的图纸里修改。有了继承你设计一个“通用汽车平台”包含引擎、轮子、方向盘。轿车、货车、跑车都基于这个平台开发继承。如果你想升级防抱死系统ABS你只需要在“通用平台”改一次所有车型就都自动升级了。总结来说继承就是通过“抽取共有逻辑”让代码更精简通过“建立层级”让系统更有序。前一篇博客多态是为了解决什么问题有什么意义的例子中正是因为Dog和Cat继承了Animal才能非常优雅地用一个Animal类型的数组来管理它们。这就是继承带来的巨大便利
继承是为了解决什么问题?有什么意义?
继承Inheritance是面向对象编程的基石之一它解决的核心问题是“如何高效地描述事物之间的共性与差异”。在没有继承的情况下如果你要创建Dog和Cat类你必须在每个类里都写一遍name、age等属性以及eat()、sleep()等方法。这会导致大量的代码重复Redundancy。以下是继承的主要意义1. 代码复用减少冗余继承允许你创建一个“基类”如Animal将所有动物共有的属性如名字、年龄和行为如吃、睡定义在里面。子类如Dog和Cat只需通过extends关键字就能复用这些代码而不需要重复编写。“爸爸有的儿子直接继承”省去了大量的体力劳动。2. 建立层级关系逻辑清晰继承不仅仅是代码复用更是为了建立一种逻辑上的“本质是一个is-a...”关系。Dog是一个AnimalCat是一个Animal这种清晰的架构让系统的逻辑结构更符合人类对现实世界的认知代码的可读性和维护性会大大提升。3. 实现“基石”功能为多态铺路没有继承多态就失去了基础。继承是多态的前提——因为Dog和Cat都是Animal的子类所以它们才能被当作Animal来统一对待。继承定义了族谱多态通过这个族谱实现统一指挥。4. 便于功能扩展当你需要增加新功能时可以直接在父类中添加方法所有的子类会自动获得该功能或者你可以在子类中重写Override父类的方法使其拥有独特的行为例如猫和狗吃的东西不一样通过继承及重写既保留了“吃”这个动作的共性又展现了“吃什么”的个性。用一个生活化的比喻假设有一家汽车工厂没有继承你要造轿车、货车、跑车。每一款车你都要从零开始设计引擎、轮子、方向盘一旦引擎出问题了你要去每一款车的图纸里修改。有了继承你设计一个“通用汽车平台”包含引擎、轮子、方向盘。轿车、货车、跑车都基于这个平台开发继承。如果你想升级防抱死系统ABS你只需要在“通用平台”改一次所有车型就都自动升级了。总结来说继承就是通过“抽取共有逻辑”让代码更精简通过“建立层级”让系统更有序。前一篇博客多态是为了解决什么问题有什么意义的例子中正是因为Dog和Cat继承了Animal才能非常优雅地用一个Animal类型的数组来管理它们。这就是继承带来的巨大便利