学面向对象也有一段时间了,再次回顾,整理所得,写成这篇,知识点只是大致说,细节每本关于面向对象的书都有,就不啰嗦占用时间和篇幅了.
一 面向对象编程的由来:
和面向对象编程相对应的是面向过程编程
面向过程编程:就像造发动机一样,需要一步一步制造汽缸,活塞,喷油嘴等等,有先后顺序
面向对象编程:没有先后顺序,将发动机的所有组件全部制造出来,放在一个仓库中.这个仓库就叫函数库.然后将所有组件组装成一个发动机.
但是软件的包很不好管理,上世纪70年代,美国海军部提出面向对象编程.将汽缸看做是一个对象,把汽缸的所有属性和功能全部封装到一个文件当中,调用方法,更改属性,都可以
调用这个封装好的文件.这样就最大程度上实现编程的模块化.
软件没有实际物质,当函数库中的函数写出来以后,就不需要再重写,只需要调用就可以.所以软件开发只需要前期编辑成本,开发完成后就是零成本,这也是360免费,软件行业免
费趋势的原因.
二 模块化的目的:为了代码复用.
代码复用的方式:组合和继承
相对于继承,更多的用到组合.实例化和调用是组合最常用到的方式.能用组合尽量用组合.
继承一般情况下是方法的功能不够强大,需要对方法进行覆写.所以尽量做到不覆写不继承.
覆写需要遵守的规范:
两个类必须有继承关系;
不能有更小的权限;
不能有更宽泛的异常;
方法名,返回值,形参要一致;
私有方法不能被覆写,即使覆写也会访问父类的;
构造方法不能被继承,不能被覆写;
静态方法不能被覆写;
覆写是特指成员方法的覆写,和成员变量,静态变量,静态方法无关.
这其中就涉及了对象的封装:其权限依次减小:public protected default private
三 覆写的目的是增强父类方法的功能.方法的覆写和重复,重载的区别:
重复:只要是方法名相同,参数列表相同,方法就是重复
覆写:权限修饰符可以更大,方法名相同,参数列表相同
重载:和覆写基本上没有关系,和继承也没有关系,权限修饰符相同,方法名相同,参数列表不同
所以,方法最终的唯一识别方式就是方法名和参数列表.
说到继承,必须要提的一个原则:
里氏替换原则:能用父类的地方肯定能用子类.这就是通常所说的多态.
变量声明的三个步骤:用类名声明数据类型开辟空间,给空间命名,把值放入空间.多态发生在赋值的地方.
所以多态有四种形式:哪里用到变量,哪里就可以多态.
直接实例化
成员方法多态
构造方法多态
成员变量多态
多态包含两种方式:向上转型和向下转型(用instanceof判断),主要应用在集合中.
和其相似结构的是内部类.
数据类型是一个类.所以数据类型出现的地方都可以替换成内部类.
只有在声明变量的时候用到数据类型,所以有
成员内部类----成员变量
静态内部类----静态变量
局部内部类----局部变量
匿名内部类----形参变量
下面附上几张大致的知识点框架图,仅供参考