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

ответ

1

В option2, ClassB ничего не добавляет к семантике приложения, так что это совершенно не нужно. Если вам не нужно реализовывать какие-либо общие (по всем подклассам) функциональности в абстрактном классе, вам лучше получить непосредственно из интерфейса, чтобы сделать вещи не излишне сложными.

В этом случае, все это может быть sensefully simplyfied к:

interface A 
{ 
    function foo(); 
} 

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

спасибо. мы можем «расширять» интерфейс? – laukok

+1

@tealou нет мы не можем. Он, безусловно, имел в виду 'implements' – thpl

+0

@ThomasDavidPlat спасибо: D – laukok

Смежные вопросы