目录
什么是面向对象
面向对象(OOP)
与面向过程相比,两者是对同一种问题的两种不同的处理角度
面向过程更注重事情的每一个步骤以及这些步骤的顺序
面向对象更注重事情都有那些参与者,以及每个参与者都需要干什么
这里可以举一个洗衣机洗衣服的案例
面向对象和面向过程举例
假设人要用洗衣机洗衣服,具体步骤为:
1.打开洗衣机
2.放衣服
3.放洗衣粉
4.清洗
5.烘干
那么面向过程会将任务拆解成一系列的步骤(函数),然后按照每一步一次执行
打开洗衣机------->放衣服------->放洗衣粉------->清洗------->烘干
面向对象则会拆解出两个类
1.人
2.洗衣机
然后将两个类分别要执行的操作(方法)赋予这个类
1.人:打开洗衣机 放衣服 放洗衣粉
2.洗衣机:清洗 烘干
从以上例子可以看出
面向过程比较直接高效
面向对象更易于复用、扩展、维护
面向对象的三大特性
三大特性为:封装 继承 多态
封装:
什么是封装
封装的意义,在于明确表示出允许外部使用的所有成员函数和数据项
内部细节对外部调用透明,外部调用无须就该或关心内部实现
也就是说外部调用的时候不用管内部方法是如何实现的,只需要知道内部是怎么调用的即可
封装的优点
-
1. 良好的封装能够减少耦合。
-
2. 类内部的结构可以自由修改。
-
3. 可以对成员变量进行更精确的控制。
-
4. 隐藏信息,实现细节。
经典封装的例子
1.Javabean的属性私有,提供get/set函数对外进行访问,因为Javabean中属性的赋值只能由Javabean本身决定,不能由外部随意修改
private String name;
public void setName(String name) {
this.name = "std_"+name;
}
正常的赋值流程为外部调用set方法赋值,然后传入的字符串拼接上特有的命名规范("std_")然后存入对象的属性中
如果属性是公有,则外部可以通过直接调用变量的属性名来对属性进行赋值,很有可能命名就不是我们规定的规范了
2.orm框架,在jdbc过程中,Mybatis就属于对jdbc进行封装,调用时只需要配置好Mybatis要求的数据,然后调用其中已经分装好的方法,Mybatis就属于封装好的类
继承:
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
子类共性的方法或者属性直接使用父类的,而不需要自己再定义,只需扩展自己个性化的
Java只能单继承,但是能实现多个接口,C++可以多继承
多态:
基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同
多态无法调用子类特有的功能,必须属于方法重写
多态的例子
继承父类,重写父类的方法,父类引用指向子类对象
父类类型名 变量名 = new 子类对象;
变量名.方法名();
这样式调用子类的方法,如果方法重写,调用子类重写后的方法
所以我们可以看出,多态就是同一个接口或者父类,使用不同的实例而执行不同操作
重载不是多态,重写才是