var PersonPojo = function(){
//
定义私有域(即成员变量)
var name = "佚名" ; //
姓名
var age = 18 ; // 年龄
var sex = "男" ; // 性别
// 姓名取值方法
this.getName = function() {
return name;
};
// 姓名赋值方法
this.setName = function(n) {
name = n;
};
// 年龄取值方法
this.getAge = function () {
return age;
};
// 年龄赋值方法
this.setAge = function(a) {
age = a;
};
// 性别取值方法
this.getSex = function() {
return sex;
};
// 性别赋值方法
this.setSex = function(s) {
sex = s;
};
// 自我介绍的方法
this.selfIntro = function() {
alert("我是一个名字叫"
+ this.getName() + ",年龄为"
+ this.getAge()
+ "的"
+ this.getSex() + "人!");
};
}
/**
*
学员Pojo类(作为本演示中的派生类(或称子类)角色出场)
* 演示OOP在JavaScript中多态的书写方式
* By
CodingMouse
*/
var StudentPojo =
function(){
//
自我介绍的方法(覆盖父类PersonPojo的selfIntro方法)
this.selfIntro = function()
{
alert("我是一个名字叫"
+ this.getName() + ",年龄为"
+
this.getAge() + "的"
+ this.getSex() + "学员!");
};
}
/**
*
教员Pojo类(作为本演示中的派生类(或称子类)角色出场)
* 演示OOP在JavaScript中多态的书写方式
* By
CodingMouse
*/
var TeacherPojo = function()
{
//
自我介绍的方法(覆盖父类PersonPojo的selfIntro方法)
this.selfIntro = function()
{
//
JavaScript中是使用arguments对象(可变参数,实现方法重载的关键点)来实现重载机制的
alert("我是一个名字叫"
+ this.getName() + ",年龄为"
+ this.getAge()
+ "的"
+ this.getSex() + "教员"
+ (arguments.length == 1 ?
(",主讲" + arguments[0] + "课程") : "")
+ "!");
};
}
/**
*
使用StudentPojo/TeacherPojo原型(prototype)方式呼叫PersonPojo出场,
*
通过指定prototype,你就可以在StudentPojo/TeacherPojo类中如同在Java中呼叫父
*
类的方式调用父类的公共域。此处可以理解为如同在Java中使用extends
*
关键字通知编译器StudentPojo/TeacherPojo类要继承PersonPojo类。
*/
StudentPojo.prototype = new PersonPojo();
TeacherPojo.prototype = new
PersonPojo();
/**
* 关键点:打招呼的演示方法 -
利用多态特性呼叫自我介绍方法
*(演示多态,由子类去呼叫父类方法,父类方法自动调用被子类覆盖过的同名方法)
*
使用父类类型的引用指向子类的对象。
*/
function SayHello(intro)
{
// 判断实参是否是PersonPojo的一个实例
if
(intro instanceof PersonPojo) {
//
调用自我介绍方法(编译器会自动获取被覆盖过的子类方法并调用)
intro.selfIntro();
}
}
// 测试程序主方法
function main(){
//
创建一个学员实例并设置属性(演示方法覆盖/重写)
var stu = new StudentPojo();
stu.setName("张三");
stu.setAge(21);
stu.setSex("男");
// 创建一个教员实例并设置属性(演示方法覆盖/重写)
var tea = new
TeacherPojo();
tea.setName("周七");
tea.setAge(26);
tea.setSex("女");
//
创建另一个教员实例并设置属性(演示方法重载)
var tea2 = new TeacherPojo();
tea2.setName("周七");
tea2.setAge(26);
tea2.setSex("女");
/**
*
关键点:利用多态特性呼叫自我介绍方法
*(演示多态,由子类去呼叫父类方法,父类方法自动调用被子类覆盖过的同名方法)
*
使用父类类型的引用指向子类的对象。
*/
SayHello(stu);
SayHello(tea);
tea2.selfIntro("Java"); //
演示方法重载
}
javascript 多态
最新推荐文章于 2023-12-03 13:09:44 发布