第7章會講述有關繼承的更多細節。然而,這裡很适合讨論多重繼承。多重繼承是類設計中最強大也最具挑戰的一個方面。
顧名思義,多重繼承允許一個類繼承自多個類。實際看起來這是個好主意。對象都應該模拟現實世界,不是嗎?現實世界中存在很多多重繼承的例子。父母是多重繼承的一個好例子。每個孩子有一對父母,這是非常自然的事。是以設計類時使用多種繼承是有道理的。在一些面向對象的語言中(比如c++中)你可以這樣做。
然而,這種情況會陷入與操作符重載相似的情況。多重繼承是非常強大的技術,事實上沒有它一些問題會變得難以解決。多重繼承甚至可以完美解決一些問題。然而,多重繼承無論對程式員還是編譯器作者而言,都會顯著增加系統的複雜度。
與操作符重載一樣,java、.net和objective-c的設計者認為多重繼承帶來的系統的複雜度超過了帶來的好處,是以從語言層面消除了多重繼承。java、.net和objective-c語言提供的接口構造能在某些方面能彌補這一點。但java、.net和objective-c不允許傳統的多重繼承。
行為繼承和實作繼承
接口是行為繼承的一種機制,抽象類則用于實作繼承。程式設計語言中的接口類型提供不同行為的接口,但不提供實作,而抽象類既提供接口,也能提供實作。第8章詳細闡述了該主題。