JAVA概念
Classes 类
划分源代码的模块,一般每个文件只有单一一个class。
Objects 对象
划分运行程序的结构,每个对象内部包含它自己的状态与数据。
两者关系
类就像C的struct,对象由类实例化得到,每次创建一个node,就类似C中的动态分配。类是模具,这个模具可以“实例化”产生一个新对象。
面向对象的重要特征
- 抽象 Abstraction:复杂度高,但接口简单
- 封装 Encapsulation:隐藏复杂结构于“引擎盖”下
- 继承 Inheritance:“类”有着类似家族遗传树的结构
- 多态 Polymorphism:相似的类可近似处理
抽象
专注于实现对象的目标、目的,无需关注各部件工作细节。
例如:关注汽车让人从A地到B地,不用知道里面的水冷、引擎等部件如何实现这个工作。
封装
不仅仅是无需知道内部工作,还有些内部工作甚至无法被看到、接触和操作。
例如,汽车的引擎管理系统。
优点:
- 鲁棒性。任何人无法有意或无意地干扰一个对象的内部工作。
- 可维护性。更容易更新或替换一个对象,而无需改变任何使用了它的代码。(前提:接口一致情况下)
- 利于团队分工。
继承
为增加代码复用性的机制。减少重复、代码更简洁。
分解父类中的共性特征,集中存储为“超级类”/“父类”,子类在需要时就向父类继承、分享所需的属性和方法。
父类更通用,子类更具体!
多态
由于同一父类下不同子类共享属性、方法(继承性、重用性),所以可以对父类下所有子类做同样的事情,而无需具体到在对哪一个子类做这个事情。
例如:对“3维”类,都可执行一样的 获取体积、三维旋转的操作,而无需关心它是立方体、三角锥还是其他3D形状。
子类指向父类。(向上转型)