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 多態
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.