年前给徒弟验收设计模式,问到面向对象的基础知识。
– 面向对象的三大特性都有啥?
答曰:继承、封装、多态。
– 嗯,没问题,也有问题。
– 没问题啊,可不就是这三个吗。难道这有问题?
– 从答案的角度来说,没问题。从思考的方式,也就是从知识网构建的角度来考虑的话,是有问题的。
从面向过程到面向对象,是有一个过程的。而这个过程是符合认知规律的。
封装:
- 面向过程到面向对象,第一步就是封装。
- 封装是为了解耦合。
- 在面向过程的代码面前。拿C/S的代码来说,所有的代码都集中在一个个的窗体中。封装把他们中具有抽象出类,使每个对象都包含它能进行操作所需要的所有信息,对象不必依赖其他对象来完成自己的操作。
- 封装有很多好处:良好的封装能减少耦合;类内部的实现可以自由地修改;类具有清晰的对外接口:属性和方法。
继承:
- 继承是类与类之间的一种关系,既然已经产生了类,那当然是已经进行了封装。所以继承是封装之后,排第二位。
- 继承是为了减少重复代码,增强代码的可维护性。
多态
- 多态是在继承的基础上出现的。
- 多态的实现在代码上是通过重写和重载实现的。重载在编译时就实现了多态性。重写override是在运行时实现多态性。方法重写,是在父类中声明virtual方法,在子类中去override它,从而达到不同的子类调用相同的方法,出现不一样的效果。也就是实现了多态。有父子类了,肯定就是有继承了。所以多态排第三位。
也就是说,如果对整个面向对象的过程大致了解的话,回答一般是这样的顺序:封装、继承、多态。(刻意说反的就不算了)
如果顺序不对的话,说明,这些知识是零星的散落在你的脑海,却没有连成一片。也就是说没有很好地构建知识网。
这是我对构建知识网的一个小例子的思考,鄙人拙见,望各位看官随意提提意见。
参考文章:[http://www.cnblogs.com/mountain-mist/articles/1214996.html]
——————————————–华丽的分割线———————————————
通过给徒弟验收,我也回顾了这些知识,又有了比之前清晰的认识。教学相长,喻于此。
我总是不清楚继承和类实例化的区别。潜意识里总是把他们搞混。
现在也来区分一下。
- 继承,是类与类之间的关系。子类继承父类,子类就拥有了父类的所有实现细节。
- 实例化,是类与对象之间的关系。类实例化成对象。
代码即人生。文字可以描述静物、描述故事、描述感情。音乐也可以,舞蹈也可以,代码同样可以。