你知道当下都有什么主流类型的编程语言吗?当然是面向过程开发和面向对象开发啦。早期的C语言就是典型的面向过程编程语言,后面诞生的Java,C++等则是面向对象的编程语言。那么两者之间有什么区别呢?
先说最容易区分的特点,面向过程里面最小的单元是函数,里面包含一个程序入口的主函数和一堆普通函数。举一个例子,在这个Java自学班里面,有一个发号指令的班长(主函数)和一群学生(普通函数),教室需要大扫除,班长让菌菌去擦玻璃(主函数调用普通函数),菌菌比较懒,就把任务交给了小木槿(普通函数可以互调),然后可怜的小木槿把玻璃擦完了。
而面向对象里面的最小单元则是类。类是具有共同属性、共同方法的一类事物。类是对象的抽象,对象是类的实例。举个例子,今日在班级里面实行小组管理制度,分为A组和B组,大家自行分组,每个小组里面有六个人,每周要轮流打扫班级卫生。小组这个名词可以理解为类,因为这个没有具体的名字,只是A组和B组的共同特性出来的一个抽象概念。A组和B组则可以比作对象,它们是具体的存在,小组的名字,成员可以比作小组的属性。再次大扫除时,班长向小组发号指令时,却不知道具体是小组里面的谁在执行指令,小组对班长隐藏了具体详细的执行方案,这也就是对象三大特征中的封装。
在Java里面,除了8个基本数据类型值以外,一切都是对象,一切围绕着对象。面向对象编程可以理解为你发号指令的单位是一个对象,不再是一个函数。比如“菌菌喝白开水”:
在面向过程的程序里是这样子的:
喝(菌菌,水);
在面向对象的程序里则是:
菌菌.喝(水);
既然是面向对象有三大特征,我们已经讲了封装,那么另外两大特征又是什么呢?
need-to-insert-img
多态
need-to-insert-img
接着谈一下多态,书本上的解释为子类对象直接赋值给父类变量,但是运行时,依然表现出子类的行为特征。个人理解为一种事务的多种形态,比如说菌菌要喝水,老大送过来一杯冻成冰块的水,小木槿递过来一杯常温状态下的水,二哥端来了一杯热腾腾的白开水。这三杯都是由水(父类)演变过来的,又有各自的温度(子类特征)。喝水是调用方法,参数是水(父类),实际送过来的水各有特点,你一个喝水的操作有不同的特征,现在懂多态了吗?
need-to-insert-img
继承
need-to-insert-img
那么什么又是继承呢?标准的解释是子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法。我们再来举个例子,想必各位同学都买过书吧,都知道书的版次是不同的。一天菌菌在某二手网站淘了一本第二版的葵花宝典,该秘籍在第一版书的基础上增加了对最新版jdk的介绍。那么我们就可以认为第二版涵盖了第一版的所有内容,并且还有自己的内容。第一版就可以当做第二版的父类,第二版当做第一版的子类,这就是继承。
网友评论