内容简介:作者:伯特出处:声明:本文出自伯特的《
作者:伯特
声明:本文出自伯特的《 LoulanPlan 》,转载务必注明作者及出处。
刚学习 Java 那会就接触了“面向对象”的概念,但当时并没有太多实战经验,所以对其的理解也仅限于概念。当工作两年后再回顾一下,有些概念能够落地了,遂记录一下,作为 LoulanPlan 的开篇。
1. 什么是面向对象
面向对象是一种程序设计的思想,而不是一种方法,亦或准则。其指导我们从现实世界中客观存在的事物出发,进行程序设计。
2. 什么是对象
Everything is Object,在 Java 语言的世界中,万事万物皆对象。上面提到“从现实世界中客观存在的事物出发”,这里客观存在的事物,我们称之为“对象”。
在程序中,对象是程序的基本构成单元,是客观存在的事物的体现。一个对象通常由一组属性和对这组属性进行操作的若干服务(方法)构成。
3. 面向对象与面向过程的出现
面对简单的软件程序,我们往往不需要考虑过多的设计,任何一个小的功能单元或模块,都可以按照一定的步骤去实现,这种 step by step 的方式即为面向过程。
随着程序的复杂性提升,我们无法按步骤去描述并实现编码,所以面向过程已无法适应。加之考虑到代码的可读及复用性等,便有了对象的概念,以及面向对象的编程思想。
当然,还有面向组件、面向服务等设计思想,不在此讨论。
4. 面向对象与面向过程的区别
要知道,二者并不是非此即彼,而是相辅相成的。
面向对象思想要求我们从宏观上进行程序设计,抽象出一个个“对象”。而面向过程,则在微观上对“对象”内部进行具体的实现。
可以看出,面向对象最终还是离不开面向过程。
举例来说,需要编程实现绘制圆形、三角形、矩形。
面向过程实现:
drawCircle... //一坨绘制相关的代码,下同 drawTriangle drawRect 复制代码
面向对象实现:
//抽象出画笔对象
class Painter {
drawCircle(){
//上述面向过程实现,下同
}
drawTriangle(){}
drawRect(){}
}
//面向对象,使用画笔绘制
1. painter.drawCircle() //此处只需要调用对象的方法,下同
1. painter.drawTriangle()
2. painter.drawRect()
复制代码
5. 对象与类
前面介绍了对象以及面向对象,下面回到 Java 中聊聊 类
的概念。
5.1 类
我们常说“物以类聚”,表达“ 同类的东西聚在一起”。其实 Java 中的类也可以这么去理解:“物”即客观存在的“对象”,同类物体的特征描述,即为“类”。
上面是我的个人理解,用术语概括就是: 类是客观事物的抽象,或者说是对现实生活中事物的一种描述(属性和行为) 。
例如前面定义的 Painter 类,是对客观事物画笔的抽象,包含了一些绘制的方法(行为)。
5.2 对象与类的关系
类进行实例化可生成对象,所以, 类的具体表现或者实例就是对象,而对象的抽象或者总概括就是类 。
6. 面向对象的三大特性
说到面向对象,就不得不说其三大特性:封装、继承和多态。
下面简单说说自己的理解吧,就不再贴相关示例了,网上有很多优秀的例子。
6.1 封装
封装是面向对象最基础的特性。在前面介绍对象时,提到“一个对象通常由一组属性和对这组属性进行操作的若干服务(方法)构成”,这里的构成体现的就是封装性。
封装,是指对外隐藏对象内部的属性和实现细节,只提供相应的接口和方法进行交互。一方面,外部只需专注于对象所提供的能力,而不用关心内部实现细节;另一方面,避免了外部随意修改或访问内部属性和方法,从而提升了程序的健壮性;同时,封装能提升代码的复用率。
6.2 继承
继承指一个对象从另一个对象中获得属性和方法的过程,继承者称为子类,被继承者称为父类。继承使得子类对象拥有父类对象的全部属性与方法(非私有)。
Key point:
- 子类也可以被其他类继承成为父类;
- 父类可以拥有多个子类,但一个子类只能有一个父类。这一点与现实中父亲与孩子的关系是一致的;
- Java 中任何类都是 java.lang.Object 的直接或间接子类;
- 子类不能继承父类中访问权限为 private 的成员变量和方法;
- 子类可以重写(override)父类的方法;
- 子类可以通过 super 关键字访问父类的成员变量、方法和构造器;
- final 声明的类或方法,不能被继承或重写;
6.3 多态
多态是在继承的基础上实现的,多态实现的三个必要条件:
- 继承
- 方法重写(override)
- 父类引用指向子类对象,例如:Human human = new Man(),这里 Man extends Human。
当使用多态方式调用方法时,会依据以下规则:
- 首先检查父类中是否有该方法,如果没有,则编译错误;
- 若子类重写了该方法,调用子类的重写方法;
- 若子类没有重写该方法,则调用父类的方法;
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
7. 总结
以上是本文的全部内容,希望能对你有所启发。内容说不上全面、无误,还望读者朋友补充、指正。
最后,感谢阅读。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Design Handbook
Baeck, Philippe de 编 / 2009-12 / $ 22.54
This non-technical book brings together contemporary web design's latest and most original creative examples in the areas of services, media, blogs, contacts, links and jobs. It also traces the latest......一起来看看 《Web Design Handbook》 这本书的介绍吧!