朋友们大家好,今天我们继续讲前面的内容,我们已经讲过继承,今天我们讲一下OOP的最后一种表现形式,那就是多态。由于javascript语言的灵活性,我们无法使用接口,所以也给js程序带来了一些困惑,我们不用太担心这个问题。因为ECMAScript的这些后期版本会为我们解决这些问题,而我们又回到了OOP多态的话题,我们可以清楚的了解到之前的继承是什么样的,就是先声明一个父类,然后我们可以编写很多子类来继承父类的属性和方法,这样我们就可以用最少的代码量实现和父类一样的功能,也就是继承。马上就有同学提出了问题:以前的传承我看了很久,能理解,但是主不知道有什么用。为什么要写这么多继承类?这个问题,立刻切中要害,相当关键。如果没有多态性,我们前面提到的继承真的没有用,因为我们所有的继承类都是完全相同的副本,没有任何特征。例如:
我们可以清楚地看到问题。熊猫甲和熊猫乙和父母班的熊猫一模一样。虽然我们可以很容易的写出很多子类,但是没有用。我们可以通过直接使用父类的属性和方法来实现我们的目标。是的,这样一来,我们觉得OOP的继承没有用。我们刚刚学到的知识不会这样浪费。哈哈,不要。
无论是人类还是其他动物都在不断的繁衍和进化,每个后代看起来都是一样的,但实际上是不同的,或多或少都有自己独特的属性或行为。现在熊猫A在一些特殊情况下学会了洗澡,有自己的卫生属性,而熊猫B是高手,学会了泡妞(大叔,我没学过,但是学会了),有自己的魅力属性。当我们需要编写一个子类来继承父类时,它必须具有与父类相同的行为或属性,并且还必须具有自己独特的行为或属性,这样就可以省去相同行为或属性的代码编写(再一次体现了OOP思想带来的好处)。让我们看看下面的示例代码:
//遗传遗传函数extend (children,parent){ for(var p in parent){ if(type of children[p]=' undefined '){ children[p]=parent[p];}}}//panda父类函数Panda(){//color this . color=' black interlaced ';//health值this.health=100//可爱值this .可爱=80;//年龄this.age='3岁';}//eat panda . prototype . eat=function(){ console . log('吃竹子');}//拉panda . prototype . shit=function(){ console . log('拉一坨运气');}//sleep panda . prototype . sleep=function(){ console . log('睡了一整天');}//mate panda . prototype . mating=function(){ console . log(‘熊猫的爱也是为了下一代’);}//Panda affunction Panda _ A(){//说说卫生这个. this.lovehealth=60扩展(这个,新Panda());}//洗澡panda _ a . prototype . bath=function(){ console . log(‘为了不生病,得讲卫生,所以去洗澡’);//洗澡谈卫生1级这个. love health=1;}//panda Bfunction Panda_B(){ //魅力值this.charm=90扩展(这个,新Panda());}//追女生panda _ b . prototype . getgirls=function(){ console . log('为了族群的繁荣,我先去追女生。“谁告诉我我的魅力这么高的?”);//结交女生,魅力值-1 this . charm-=1;}我们来看看下面的例子,是不是和上面描述的一样?
无论是父类的实例还是子类的实例,都可以正常使用父类(共享)的属性和行为函数。让我们来看看独特的。
接下来大家最关心的行为还没有测试,就是熊猫B可以泡妞,不再调整大家的口味,马上测试。
看完上面的例子,我们已经知道什么是多态性了。现在有同学问:我们以前可以实现多态性,但是只看到一些独特的属性和行为。那么我们可以改变一些原有的属性和行为吗?因为我们要模拟物体,所以要尽可能做同样的模拟。比如再有一只C类熊猫,它们已经进化到了更高的层次,不再需要吃竹子了。连学者都开始吃了:
//panda c函数panda _ c () {extend (this,new panda());}//Eat panda _ c . prototype . Eat=function(){//Eat console . log('我们要进化到比人类更高级,所以开始吃代替竹子!');}
看,只要是不同于父类的属性或行为,我们都可以通过重写来覆盖,以满足子类蜕变的特殊要求。
综上所述,今天我们将对之前继承的思路进行补充,从而实现多态模拟。OOP以为,我们会先告一段落。相信大家对OOP已经有了自己的理解,就是把代码模拟成对象进行编写,有两个好处:
1.提高了代码重用率,提高了工作效率。
2.代码已经在对象中进行了模拟,所以组织好的代码便于我们以后管理、维护和扩展。
以上就是本文的全部内容,希望对大家的学习有所帮助。