2011-06-16 195 views
30

在我見過的每個例子中,擴展類都實現了父類的接口。作爲參考,下面的例子:擴展類中的接口和抽象類的繼承,實現

interface MyInterface{ 
    public function foo(); 
    public function bar(); 
} 

abstract class MyAbstract implements MyInterface{ 
    public function foo(){ /* stuff */ } 
    public function bar(){ /* stuff */ } 
} 

// what i usually see 
class MyClass extends MyAbstract implements MyInterface{} 

// what i'm curious about 
class MyOtherClass extends MyAbstract{} 

是未能實現一個孩子,這是由家長來實現一個接口,被認爲是不好的做法還是什麼?是否有任何技術上的缺陷來忽略孩子的實施?

+1

你沒看我的例子,然後 – Gordon 2011-06-16 08:39:16

+0

@戈登 - 沒有先生,我沒有。所以我假設你通常會忽略子類聲明的接口。 – Dan 2011-06-16 08:41:22

+1

是的,確切地說。無論如何,孩子將實現該接口。見http://codepad.org/OTZ2J5kB – Gordon 2011-06-16 08:52:47

回答

19

我會認爲你是在正確的道路上。當擴展已經是implements的類時,沒有必要聲明您正在實現接口。對我而言,如果需要更改,這只是另一段代碼。所以,是的,你是對的!

+0

謝謝**埃米爾伊萬諾夫**;這就是我所設想的。我並沒有在接口上工作太多(*超越了SPL等),並開始將它們融入到我的項目中,因爲越來越多的代碼將被客戶端程序員所觸及。我主要擔心的是如果由於遺漏而可能發生任何繼承變更。 – Dan 2011-06-16 08:44:57

0

未能在兒童中實施接口,由父母實施,認爲是不好的做法或什麼?

孩子總是實現接口,它不能與此交往。

我不知道,如果這是不好的做法或什麼的。我會說這是一種語言功能。

是否有任何技術上的缺點,忽略兒童的實施?

例如,您無法測試抽象類的反射。

但是,抽象類已經是一個接口,所以在技術上他們自己並不真的需要接口,但是你可以這樣做來保持事​​物在繼承中的流暢性。

17

是未能實現一個孩子,這是由 母公司實現的接口 ,被認爲是不好的做法或 什麼?是否有任何技術 的缺點,以忽略兒童實施 ?

我不能回答你的問題比這更好的傢伙:

從性質上說,雖然有時 它們看起來非常相似,抽象 類和類接口服務 非常不同的目的。

類的接口意味着該類的「用戶」的 工具。 接口是 該類的公開演示文稿,它應該向 發送廣告,任何人都在考慮使用它, 方法和常量可用 並且可以從外部訪問。所以, 顧名思義,它總是坐落在 之間的用戶和類 實施它。

另一方面,抽象類 是一個工具,旨在幫助 擴展它的類的「實現者」。這是一個基礎設施 ,它可以強加限制和 類的具體指導。從類 的設計角度來看,抽象類 比接口在架構上更重要 。在這種情況下, 實現者位於抽象類 類和具體類之間,後者位於前者之上 。

Reference

因此,它是由你來決定的基礎上,誰去使用(實例)的類和誰去寫他們。如果你是你課程的唯一用戶和作者,那麼也許,也許,你不需要他們兩個。但是,如果你想讓每個人都被剝離爲類作者和類用戶的核心藍圖,那麼你應該考慮同時使用抽象和實現。

0

嗯,我也很困惑,但我認爲你應該使用後者,你說得對,如果你在抽象類中實現了接口,那麼就沒有必要寫這個接口,你可以編寫方法因爲你將擴展抽象類,並且當你在其他地方使用類時,你將不得不使用抽象類作爲參數類型,這不是一件好事,我認爲抽象類類不應該用作參數類型,而應該是一個接口。