Java是一门面向对象的编程语言,而面向对象编程有三大重要的特性,那就是封装、继承、多态。
一、封装
封装 ,就是尽可能地隐藏对象内部的部分属性和实现细节,将对象的属性和操作结合成一个独立的整体,对对象数据的访问只能通过对外暴露的接口进行。
通俗点讲,就是类似于我们平时使用的空调,空调的各种零件被封装在空调外壳中,只通过对外暴露的遥控器进行操作,具体的制冷原理被隐藏了起来。
封装的好处在于:
- 良好的封装可以减少耦合
- 可以对用户对类的修改进行更精确的控制
- 类内部的实现可以自由修改,不需要修改调用该类的代码
- 隐藏信息和实现细节,保护了私有数据,减少了模块间的干扰,降低了程序复杂性,提高了可控性
二、继承
继承 ,就是子类继承父类的特征和行为,子类拥有父类的属性和方法。
在Java中,继承是以已存在的类的定义为基础创建新类的技术,新类可以增加新的数据和功能,也可以使用父类的功能,覆盖父类同名方法的操作称为 重写。
总结来说就是:
- 子类拥有父类非private的属性和方法
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
- 子类可以用自己的方式实现父类的方法(重写)
在继承中还有一个重要的概念, 向上转型
向上转型 指的是可以将子类转换成父类,因为子类拥有父类所有公开的属性和方法,这种转换操作是安全的,唯一发生变化的就是父类私有属性和方法的丢失。因为该操作在继承关系上面是向上移动,所以称为向上转型。
继承存在诸多缺陷,所以在使用的时候需要谨慎,原因如下:
- 父类发生变化,子类就必须跟着变
- 继承破坏了封装,父类的实现细节对于子类是透明的
- 继承是一种强耦合的关系
三、多态
多态 指的是对于一个行为,不同的子类有不同的表现形式。同一个接口,使用不同的实例对象执行不同的操作。
什么时候需要用到多态呢?举个例子,我们需要商品在不同活动下有不同的价格,这时候,我们只需要定义一个计算活动价格的接口,然后让不同活动实现这个接口,就可以做到灵活扩展,而不需要修改计算商品价格的逻辑,当有新活动的时候,只需要再编写一个实现类即可。
多态的优点:
- 消除类型之间的耦合关系
- 使程序有良好的扩展,可以添加更多类型的子类实现功能的扩展,不需要修改基于父类的代码
多态的实现方式:
- 重写
- 接口
- 抽象类和抽象方法