2014-12-19 107 views
-2

抽象類實現接口是好還是壞?抽象類實現接口是好還是壞?

以下兩個例子都適用,但哪一個使對您更有意義

選項1,

interface A { 
    function foo(); 
} 

abstract class B implements A { 
    abstract public function foo(); 
} 

class C extends B { 
    public function foo() { 
     echo 'works'; 
    } 
} 

$o = new C(); 
$o->foo(); 

選項2,

interface A { 
    function foo(); 
} 

abstract class B implements A { 
} 

class C extends B { 
    public function foo() { 
     echo 'works'; 
    } 
} 

$o = new C(); 
$o->foo(); 
+1

沒有足夠的信息。在第二個例子中,根本沒有B類的理由,所以這個問題沒有任何意義。我們需要知道真實情況。 – vojta 2014-12-19 08:41:02

回答

1

在選項2,ClassB的增加無關,你的應用程序的語義,所以它是完全不必要的。如果您不需要在抽象類中實現某些共享(通過所有子類)的功能,則應該更好地直接從該接口派生,以使事情不會不必要的複雜化。

在這種情況下,整個事情可以sensefully simplyfied到:

interface A 
{ 
    function foo(); 
} 

class C implements A 
{ 
    public function foo() { 
     echo 'works'; 
    } 
} 
+0

謝謝。我們可以'擴展'一個界面嗎? – laukok 2014-12-19 08:53:44

+1

@tealou不,我們不能。他當然意味着'執行' – thpl 2014-12-19 08:59:05

+0

@ThomasDavidPlat謝謝:D – laukok 2014-12-19 09:37:58