tips:本文尽量用朴实易懂的语言来解释面向对象的思想。

荒古时期

上帝首先创造了几个原始类 original class。例如:动物类Animal,植物类Plant,地形类Topography,气象类Atmosphere等作为地球上一切物质的开端,而本文我们将使用动物类作为例子。

分类而生

在创造了动物类Animal之后,为它添加了公共属性mouth:true公共方法eat(){},mating(){}

之后他决定开始细分,这里我们做的简单一点,并不按照“界门纲目科属种”的分类依据,而是直接按照人类Human,猫类Cat,狗类Dog 等进行细分。

他根据动物类Animal创造了人类Human,我们可以说,人类继承自动物类,所以人类这个类中也会存在动物类的公共属性和公共方法。同样的,人类也有自己的公共属性stand:true公共方法farming(){} 。然后,上帝根据人类Human创造了一个人:小明。

小明是一个根据Human创造出的实例对象,20岁的会弹钢琴的男性程序员,他同时继承AnimalHuman类的公共属性公共方法

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方法,返回的孩子却不一样呢?这就是多态。当同一个操作(方法)作用与不同的对象时,会产生不同的执行结果。

以上,面向对象的三个基本特征 封装、继承、多态 都讲完了。肯定讲的不够深入,如果有什么理解上不正确的欢迎在评论区中指正,也欢迎大家讨论。


秦锋
26 声望0 粉丝