天下之事,必先处之难,而后易之。

JavaScript面向对象之继承和多态

前言:我之前已经写过了javascript如何创建一个类似于java写法的类User,并且也写了一些类似的一些写法。

既然关注了面向对象的类,就无可避免地要提到面向对象的特性:封装,继承和多态。

封装:封装就像是一个类,它把对象类似于表格数据单元存储起来,对外只提供属性和方法。

继承:继承就是在类的基础之上加以扩展使现有的类属性更加全面,做的事情甚至更多(当然也可以完全不做任何修改,直接拿来使用)。

多态:动态的调用类型或接口方法,自动完成类型匹配。下面代码为证:

1、封装一个User类,作为基类

/**
  *声明一个类似于java的类并添加其属性
  */
 var User=function(){
   var name='jack';//默认值
   var gender=‘male’;//默认值
   var age=20;//默认值
   this.setName=function(name){
        this.name=name;
  };

   this.getName=function(){

       return this.name;

 }
   this.setGender=function(gender){
       this.gender=gender;
  };

  this.getGender=function(){

    return this.gender;

 }
 this.setAge=function(age){
       this.age=age;
  };

 this.getAge=function(){

     return this.age;

  }

 this.introduceMyself=function(){

     alert('Hello!my name is '+this.getName()+",I'm "+this.getAge()+'years old!');

}
}

2、继承:创建User的子类

派生出子类Bluce并重写介绍自己的方法。

var Bluce=function(){

   this.introduceMyself=function(){

     alert('Bluce say hello to you!');

    }

}

派生出子类Lisa并重写自己的介绍方法。

var Lisa=function(){

this.introduceMyself=function(){  

     alert('Lisa  say hello to you!');

   }

}

/**

 *多态方法

 */

function sayHello(intro){

    // 判断实参是否是User的一个实例

    if (intro instanceof User) {

    // 调用sayHello方法(编译器会自动获取被覆盖过的子类方法并调用)

     intro.introduceMyself();

   }

}

实现继承:

Bluce.prototype=new User();

Lisa.prototype=new User();

 3、多态调用

var  ub=new Bluce();

ub.setName("Bluce");

ub.setAge(23);

ub.setGender('male');

ub.sayHello(ub);

 

var ul=new  Lisa();

ul.setName("Lisa");

ul.setAge(21);

ul.setGender('female');

ul.sayHello(ul);

posted @ 2012-05-13 14:18  boonya  阅读(254)  评论(0编辑  收藏  举报
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。