JavaScript面向对象之继承和多态
2012-05-13 14:18
190 查看
前言:我之前已经写过了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);
既然关注了面向对象的类,就无可避免地要提到面向对象的特性:封装,继承和多态。
封装:封装就像是一个类,它把对象类似于表格数据单元存储起来,对外只提供属性和方法。
继承:继承就是在类的基础之上加以扩展使现有的类属性更加全面,做的事情甚至更多(当然也可以完全不做任何修改,直接拿来使用)。
多态:动态的调用类型或接口方法,自动完成类型匹配。下面代码为证:
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);
相关文章推荐
- Javascript 面向对象,继承和多态
- JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档
- javascript面向对象:继承、多态
- JavaScript 面向对象(封装、继承、多态)多种方式实现完全总结
- JavaScript基础--面向对象三大特性(八):继承封装多态
- 韩顺平 javascript教学视频_学习笔记19_js面向对象三大特征(封装,继承,多态)
- 初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)
- 7.1面向对象(继承中成员方法关系,final关键字,多态,抽象类,接口)
- C#——面向对象——继承——虚方法和多态
- javaScript面向对象继承方法实现
- 面向对象的javascript系列文章(3)继承——代码重用
- javascript面向对象之Javascript 继承
- Java基础知识:面向对象-封装、继承、多态
- JavaScript高级 面向对象(5)--最简单的继承方式,混入mix
- C实现面向对象封装、继承、多态
- 黑马程序员----Java基础之面向对象(封装 继承 多态)
- 什么是面向对象的JavaScript(四)——多态
- JavaScript 面向对象程序设计(下)——继承与多态
- JavaScript 面向对象程序设计(下)--继承与多态
- Javascript 面向对象之构造函数的继承