Javascript繼承(下) 為何要繼承

來源:互聯網
上載者:User

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)這個方法,但這不應該由子類和父類實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.