谈谈面向对象的理解
面向对象和面向过程
面向对象是一种编程思想,主要的编程思想有两种:面向过程和面向对象。
举个例子,洗衣机洗衣服这件事;
如果用面向过程的思想来理解这件事,就需要把洗衣机洗衣服这件事拆分成:打开洗衣机-》放衣服-》选择工作模式-》运行-》拿出衣服等等。
如果用面向对象的思想来理解这件事,需要分析这件事的参与者,有人、洗衣机、衣服,也就是这件事涉及到的对象。然后定义这些对象的属性和行为。拿洗衣机来举例,洗衣机的属性应该包括,洗衣机品牌、是否开启、是否运行、工作模式等等;行为包括:注水、洗涤、漂洗、排水、脱水等等。
如此看来,面向对象比面向过程复杂许多,但是这一点是相对的,如果项目系统十分庞大,面向过程的思想写出来的代码也会复杂。
面向过程的特点是:符合人的常规思维,把一件事情按照顺序、逻辑来拆分,简单。
面向对象的特点是:抽象出事件的参与者,定义参与者的属性和行为,扩展性、维护性、复用性都更好。
面向对象的三大特性
封装、继承、多态
封装:就是抽象出事件的参与者,定义参与者的属性和行为,并给出属性和行为的约束,既属性和行为对于外部的可见性。
拿JavaBean来举例,一般的JavaBean的属性都是私有的,防止外部随意修改对象的属性,而这些属性各对应着对外公开get、set方法,用于通过对象本身来获取和设置属性。为什么要这样做?是因为用过set方法为对象的私有属性赋值比直接通过"对象.属性=xxx"的方式更加安全。set方法可以根据JavaBean的特点定义安全约束,比如,人这个对象有年龄的属性,set方法里可以加入判断,如果set进来的年龄不在0-150这个年龄范围内,抛出参数异常。
继承:子类继承父类,子类就包含了父类的所有非私有熟悉和方法,提高了代码的复用性。且子类可以对父类的方法进行覆盖和重写。
多态:父类引用指向子类对象。提高代码的复用性,外部对同一个方法的调用,执行的逻辑不一样。
举个例子:动物(父类),狗、猫、狼都是其子类。
在动物类定义一个方法:
public void call(Animal animal) {
System.out.println(animal.getCall());
}
外部函数中,如果传入的是Animal的子类对象,那么执行System.out.println(animal.getCall());
会根据animal这个引用指向的实际对象来调用对应的getCall方法。
持续更新中,以上是学习笔记可能存在错误,望指正…