学过JAVA的都知道面向对象是它的一大特点,一直没好好总结过,今天来好好捋一捋。
以面向过程来对比,面向对象和面向过程区别在于实现方式,面向过程是把问题的实现分解为一个个的小步骤,然后用函数实现后依次调用。
而面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向对象三大特征:封装、继承和多态,我觉得应该还有抽象。抽象是一种思维方式,将问题空间中具有的相同特征或行为抽象出来,接着将这些特征和行为进行结合,对内执行操作,对外隐藏细节和数据信息,形成一个聚合体,也就是类,这个过程就是封装,如果没有抽象,封装就无从谈起,没有封装,抽象也毫无意义。
当我们费尽心思做出一个类之后,若有一个新的需求功能略有改动但与已有的类大致相同,如果这个时候再新建一个新的类就太没意思了。继承就是为这个场景设计的,使用继承时相当于创建了一个新类,但它不仅包含现有类型的所有成员,还包含它所继承的父类的所有属性和接口(但private成员被隐藏不能访问)。
最后就是多态,封装和继承可以说都是为多态服务的,多个类继承了同一个父类、他们有共同的父类方法但实现却不同,java中还有一个叫接口的东西,一个接口可以被多个类实现,那么在调用这个接口时是不是要指定具体的实现方法呢?显然不是,多态,就是站在抽象的层面上去实施一个统一的行为,到个体(具体)的层面上时,这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为。例如上班时间到了,老板喊一声:“大家干活了!”于是所有人就各忙各的去了。如果老板不运用多态的方法,那就需要喊一句:“前台去接待了,业务员去销售了,人事去招聘了,清洁工去扫地了,码农去敲代码了……”然后喊完估计就快下班了。多态比起封装与继承来说要复杂很多,上面的描述很简单,不用去死抠多态两个字,其实只要明白:能站在抽象的角度去描述一件事,而针对这件抽象的事,对于每个个体(具体)又能找到其自身的行为去执行,这就是多态。