国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript繼承之為什么要繼承

2024-05-06 14:20:55
字體:
來源:轉載
供稿:網友
Quiz1
Javascript真的需要類(Class)么?
我們首先先看下其他有類(Class)的面向對象語言(如:Java)的一些特性。

父類與子類
父類(Superclass)和子類(Subclass),并不是為了解決父親與兒子的問題,而是為了解決類的包含關系的,我們用Sub表示“子類”,用Sup表示“父類”,則有:
  Sub Sup
這是有區別的,例如通常我們能夠將子類當成父類來使用,但認人的時候我們并不能把兒子當成父親。
或者可以這么說,父類和子類不是為了解決類間存在相同方法或者屬性的。

舉個例子
有人喜歡這樣做:
我們需要一些動物的類,以便在屏幕上創建一些移動的動物,但移動的動物有些在空中飛行,有些在路上行走。
所以創建兩個父類,一個是Fly,一個是Walk:
代碼如下:
Class Fly{
Fly(){}
}
Class Walk{
Walk(){}
}

然后獅子們(還可以再建些其他的在路上行走的動物)就屬于Walk類,老鷹們(也還可以再建些其他在天上飛行的動物)就屬于Fly類:
代碼如下:
Class Lion extend Walk{
}
Class Eagle extend Fly{
}

最后對Lion和Eagle類創建一些實例,調用相應的方法,屏幕上就會有一些獅子和老鷹在移動了。
但這可能并不是一個好的設計,比如明天老板突然一拍大腦,他要有一種叫天馬(Pegasus)的動物,它們即會在天上飛,又會在路上走,時而要飛行,時候要行走。
在這種情況下,這個方案就全然無用了。

為什么這個設計失敗了?
繼承是有條件的,子類必須能嚴格的向上轉型(變成父類)。
在上面這個例子中:
獅子(Lion)被假設等同于行走動物(Walk),老鷹(Eagle)被假設等同于飛行動物(Fly)。
這看起來很成功,因為子類能嚴格向上轉型,但他有隱患。
當有一種天馬(Pegasus)介入到里面的時候,我們才發現獅子其實只是“會行走的動物”,老鷹其實只是“會飛行的動物”,這不意味著動物一輩子只能飛行或者行走,所以即會飛行又會行走的天馬就找不到自己的歸屬了。
這個例子很好的證明了,子類和父類不是為了解決類間具有相同的方法的:
一些動物都會行走,需要擁有行走(Walk)這個方法,但這不應該由子類和父類實現。

組合
我們可以這樣解決這個問題:
代碼如下:
Class Lion{
walker = new Walk();
walk(){
return walker.walk();
}
}
Class Eagle{
flyer = new Fly();
fly(){
return flyer.fly();
}
}
Class Pegasus{
walker = new Walk();
flyer = new Fly();
walk(){
return walker.walk();
}
fly(){
return flyer.fly();
}
}

組合是簡單的在新類內部創建原有類對象。所以組合才是為了解決類間具有相同的方法的。在這個例子里面:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 怀仁县| 博野县| 桑日县| 大埔区| 大邑县| 南丹县| 象山县| 四川省| 北票市| 桃园市| 应用必备| 黑河市| 普陀区| 疏勒县| 天峻县| 梁平县| 绍兴县| SHOW| 阿鲁科尔沁旗| 沙坪坝区| 武乡县| 拉孜县| 邯郸市| 莲花县| 攀枝花市| 繁峙县| 洪泽县| 平安县| 启东市| 巴里| 江达县| 黎城县| 盐津县| 即墨市| 大港区| 文安县| 玛多县| 汝南县| 青海省| 屏边| 九龙坡区|