2014-12-19 56 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