tips:本文尽量用朴实易懂的语言来解释面向对象的思想。
荒古时期
上帝首先创造了几个原始类 original class
。例如:动物类Animal
,植物类Plant
,地形类Topography
,气象类Atmosphere
等作为地球上一切物质的开端,而本文我们将使用动物类作为例子。
分类而生
在创造了动物类Animal
之后,为它添加了公共属性:mouth:true
和公共方法eat(){},mating(){}
。
之后他决定开始细分,这里我们做的简单一点,并不按照“界门纲目科属种”的分类依据,而是直接按照人类Human
,猫类Cat
,狗类Dog
等进行细分。
他根据动物类Animal
创造了人类Human
,我们可以说,人类继承自动物类,所以人类这个类中也会存在动物类的公共属性和公共方法。同样的,人类也有自己的公共属性stand:true
和公共方法:farming(){}
。然后,上帝根据人类Human
创造了一个人:小明。
小明是一个根据Human
创造出的实例对象,20岁的会弹钢琴的男性程序员,他同时继承了Animal
和Human
类的公共属性和公共方法
mouth:true,
stand:true,
farming(something){
...
},
eat(something){
...
},
mating(someone){
return xxx
}
而他的私有属性是 occupation:programmer
,私有方法是playingPiano(){...}
,小明把他的个人情况都藏起来【封装】,只有他告诉别人自己的情况,别人才会知道,而且别人不知道他会弹什么曲子的,只能说“小明你弹个钢琴给我听一下”。调用小明.playingPiano()
【封装之后只有对外提供接口后才可以使用】
有一天,小明认识了一个女生小白,小白是一个21岁的会唱歌的客服,私有属性是 customService
,私有方法是singing(){...}
。后来他们谈恋爱并且结婚了,有一天小明调用了自己的方法mating
,并将小白作为参数传入,随后return出了一个孩子:小黑。但是小黑并没有继承小明的playingPiano
和小红的singing
,反倒是有了自己的私有属性tellingStory
。但唯一和小明还有小红一样的是,他继承了动物类Animal
和人类Human
的公共属性、公共方法。
与此同时,另一对夫妻小华和小花,他们也调用了自己的mating
,但是 return 的是另一个与小黑不同的孩子——小月,她的私有属性与她的父母都不同,是playingBasketball
,但同样的,她也继承了动物类Animal
和人类Human
的公共属性、公共方法。
为什么都调用了mating
方法,返回的孩子却不一样呢?这就是多态。当同一个操作(方法)作用与不同的对象时,会产生不同的执行结果。
以上,面向对象的三个基本特征 封装、继承、多态 都讲完了。肯定讲的不够深入,如果有什么理解上不正确的欢迎在评论区中指正,也欢迎大家讨论。