面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。
对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:
对应在现实中可以这么理解,学生可以抽象成为一个对象,一一对应的话如下:
利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。
设计的时候可以将学生中实体封装起来,内部隐藏id这个属性。外部只允许调用公开的属性和方法。
优点:
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承实现了 IS-A 关系,例如 Cat 和 Animal 就是一种 IS-A 关系,因此 Cat 可以继承自 Animal,从而获得 Animal 非 private 的属性和方法。
继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。
Cat 可以当做 Animal 来使用,也就是说可以使用 Animal 引用 Cat 对象。父类引用指向子类对象称为 向上转型 。
Animal animal = new Cat()
多态性是指允许不同子类型的对象对同一消息作出不同的响应。
例如:小猫小狗都是动物的子类,但是小猫会喵喵喵,小狗会汪汪汪。
多态分为编译时多态和运行时多态:
运行时多态有三个条件:
描述类之间的关系可有使用UML类图表示。这里直接引用大话设计模式中1.11章节提供的UML类图作为示例。
类之间的关系,类与接口之间关系可以分一下几种
泛化关系其实就是继承关系,在 Java 中使用 extends 关键字。
用来实现一个接口,在 Java 中使用 implement 关键字。
UML表示方式使用空心三角+虚线
此处表示大雁实现了飞翔的接口,存在飞翔的行为。
表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。
UML表示方式:空心菱形+实线箭头
聚合表示一种弱的拥有关系,体现的A(雁群)对象可以包含B(大雁)对象,但B对象不是A的对象的有一部分
和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了
UML中表示方式:实心菱形+实线箭头
组合是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。例如鸟和翅膀的关系。
表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。因此也可以用 1 对 1、多对 1、多对多这种关联关系来表示。
UML表示方式:实线箭头
和关联关系不同的是,依赖关系是在运行过程中起作用,动物生存需要在依赖于氧气和水,这个是需要在某一个场景下才能构成依赖。
UML表示方式:虚线箭头
大话设计模式1.11章节PDF
Java 全栈知识体系