1.什么是面向对象
面向对象是一种思维方式[与语言无关],教你如何思考代码
Object Oriented Programming
orient 的英文意思 是 使朝向
那么,面向对象不如说成是以对象为目标的一种编程思维方式
2.面向对象的主要概念浅析
好了,现在让我们进入正题
面向对象的难点之一就是它有一大堆的概念——类、实例、成员等等,为了让我们更好地理解这些概念,我们从一个故事讲起。
龚先生是一位在当地非常有名气的厨师,但他对自己用的锅一直不太满意,于是打算自己造一个
龚先生想好了。他的第一个锅必须要剑走偏锋,于是起名为“日天锅”,并且得是金色的,而且必须要用寒铁制造,方能展现实力
龚先生风风火火画好了一份设计图纸
// 日天锅
// ---------
// 颜色:金
// 用料:钛合金
// 功能:炒菜()
日天锅造出来后,龚先生如有神助,手艺直线上升,日天锅的大名就此传开
某日,一土豪前来,让龚先生为他也定做一款日天锅,不过这次要镶嵌24颗钻石
龚先生欣然接受,并画好了第二份设计图纸,只是 在原有的基础上镶嵌了钻石
// 镶钻日天锅
// ---------
// 镶嵌物:钻石
土豪把镶钻日天锅带回家后,瞬间得到了一众土豪太太和她的闺蜜圈的喜爱,大家纷纷询问能否批量生产,在原有的基础上加上煮菜功能
龚先生自然不会放过这个赚钱的机会,于是乎画出了第三份图纸, 只是在【镶钻日天锅】原有的基础上增加了新功能
// 镶钻日天锅——土豪太太版
// ---------
// 新功能:煮菜()
从那以后龚先生再也没有炒过菜,而是专心致志进行着造锅业务,而且大力发展物流业务,努力早日让客户享受到“人在家中坐,锅从天上来”的顶级服务
完
2.1类/实例/成员/方法/实例成员/静态类
根据这个故事,我们来解释一下面向对象一些名字非常抽象的概念^_^:
- 类:龚先生的设计图纸就是类【你也可以把类理解成一个constructor[构造器]】
- 实例(对象):龚先生根据图纸制造出来的锅就是实例【实例其实就是对象,只不过在面向对象中叫做实例】
- 成员(属性):龚先生的图纸里,例如颜色、用料等,这些被称为成员
- 方法(函数):龚先生图纸里,例如炒菜()、煮菜()
- 实例成员:也就是实例的属性,比如日天锅的颜色
- 静态类:无法实例化的类,龚先生日后可能会搞出一些奇怪的图纸,这些图纸根本逻辑可能就是错的,以至于根据这个图纸是造不出来锅的
2.2继承和封装
2.2.1继承
好吧,让我们来看看龚先生的锅的广告词
镶钻日天锅
这款锅不仅 继承了日天锅的金色和钛合金用料还有炒菜功能 ,而且还新增了24课钻石镶嵌于其上,你还在等什么?
下一款
钻石日天锅——土豪太太版
这款产品不仅拥有新功能煮菜,而且还 继承了日天锅的金色和钛合金用料还有炒菜功能 和 镶钻日天锅的24颗钻石 ,你还在等什么?
2.2.2封装
让我们暂时远离一下龚先生和他该死的锅
封装的概念其实就是把一些复杂的东西封装成一个类——把细节隐藏起来
什么意思呢?
比如你拿到一个大补药方,里面让你把当归、人参、枸杞找来,每个两百克在一块儿煮一个时辰【大家别乱试,只是举个例子】,你只要通过你的大补药方,就能造出【实例化】大补药,而无需了解当归、人参、枸杞他们分别有什么作用,如何种植这些本就无需了解的细节
这就是封装的优势
3.轻松一刻
// JavaScripter的代码
var bluesbone = {name: "Bruce"}
// Java程序员说
// 不行!你的图纸呢?bluesbone这个实例怎么直接出来了?
// 经过Java程序员的修改后
var bluesbone = new Object()
bluesbone.name = "Bruce"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。