乐趣区

关于面向对象编程:面向对象关联Association和继承Inheritance的区别

关联(Association)

Association 指的是 类之间的协作关系 ,其中一个类与另一个类进行交互,但它们之间 并没有父子关系 。Association 通常示意 一个类须要另一个类的某些服务或数据,或者示意类之间有某种独特的特色或属性。

继承(Inheritance)

Inheritance 指的是从 父类到子类的属性和办法的传递过程 ,子类能够 继承父类的属性和办法 ,并能够在此基础上增加本人的属性和办法。Inheritance 次要是为了 实现代码的重用,防止反复编写代码。在 Inheritance 中,子类和父类之间存在一种父子关系,子类从父类继承了所有的个性,包含属性和办法。子类能够增加新的个性或办法,也能够笼罩或重载继承的办法。

例子

以下通过图书馆管理系统为例来阐明 Association 和 Inheritance 的区别:

Association 关系

图书馆类 Library 和读者类 Reader 之间存在一种协作关系,每个读者能够在图书馆中借阅、偿还图书。此时 Library 类和 Reader 类之间就存在 Association 关系。

┌───────────────┐          ┌───────────────┐
│     Library   │          │      Reader   │
├───────────────┤          ├───────────────┤
│               │◀─────────┤               │
│  borrow_book  │          │ borrow_book   │
│  return_book  │          │ return_book   │
│  search_book  │          │               │
│               │          └───────────────┘
└───────────────┘

Inheritance 关系

在图书馆管理系统中,所有书籍都有一些独特的特色,如书名、作者、出版社等等。因而能够定义一个 Book 类作为所有具体书籍类的父类,每个具体书籍类能够继承 Book 类的属性和办法。此时,具体的书籍类与 Book 类之间存在 Inheritance 关系。

┌───────────────┐
│      Book     │
├───────────────┤
│  title        │
│  author       │
│  publisher    │
│  price        │
│               │
└───────────────┘
          ▲
          │
┌───────────────┐
│    Novel      │
├───────────────┤
│  genre        │
│  language     │
│  is_best_seller│
│  ISBN         │
└───────────────┘
          ▲
          │
┌───────────────┐
│   Textbook    │
├───────────────┤
│  subject      │
│  level        │
│  edition      │
│  ISBN         │
└───────────────┘
退出移动版