什么是面向对象编程
面向对象程序设计(简称OOP)是当今主流的程序设计范型,它已经取代了20世纪70年代的“结构化”过程化程序设计开发技术。Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。面向对象程序是由对象组成的程序,每个对象包含对用户公开的特定功能部分(public)和隐藏的实现部分(private),即:面向对象编程。
面向对象由来
前面提到面向对象程序设计取代了“结构化”过程化程序设计开发技术,所以OOP的诞生与结构化过程程序设计也是有一定关系的。传统的结构化程序设计通过设计一些列的过程(即算法)来求解问题。一旦确定这些过程,就要开始考虑存储数据的方式。这就是Pascal语言的设计者Niklaus Wirth将其著作名为《算法+数据结构=程序》的原因,算法是第一位,数据结构是第二位,这就明确的表述了程序员的工作方式。而OOP却调换了次序,将数据放在第一位,然后再考虑操作数据的算法。
类——对象的载体(数据存储方式)
**类(class)是构造对象的模版或蓝图。**我们可以将类想象成制作小甜饼的切割机,将对象想象成小甜饼。由类构造(construct)对象的过程称为创建类的实例(instance)。
对象
想要使用OOP,一定要清楚对象的三个主要特征:
- 对象的行为(behavior)——可以对对象施加操作(方法)
- 对象的状态(state)——当施加方法时,对象状态变化(对象属性变化)
- 对象标识(identity)——辨别具有相同行为与状态的不同对象(引用)
面向对象三大特征
面向对象三大特征都有利于程序实现高内聚,低耦合。
封装
封装(encapsulation,有时候称为数据隐藏)是与对象有关的一个重要概念。从形式上看,封装不过是将数据和行为组合一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域,操纵数据的过程称为方法。对于每个特定的类实例(对象)都有一组特定的实例域值。实例封装的关键在于绝对不能让类中的方法直接的访问其他类的实例域。程序仅通过对象的方法与对象数据进行交互。封装给对象赋予了“黑盒”特征,这是提高重用行和可靠性的关键。
继承
通过扩展一个类来建立另外一个类的过程称为继承,关键字extend。利用继承,人们可以基于已存在的类构造一个新的方法和域,以满足新的需求。这是Java程序设计的核心技术。
多态
多态的定义:
- 父类的引用变量指向子类对象
- 父类只能使用子类重写的非静态成员方法,而如果想用子类的所有属性的话,就强制转换成子类。
多态的存在有三个前提:
- 要有继承关系
- 子类要重写父类的方法
- 父类引用指向子类对对象,