2011-09-01 17 views
32

抽象クラスから抽象クラスを継承することは可能ですか?例えばphp abstractクラス別の抽象クラスを継承する

abstract class Generic { 
    abstract public function a(); 
    abstract public function b(); 
} 

abstract class MoreConcrete extends Generic { 
    public function a() { do_stuff(); } 
    abstract public function b(); // I want this not to be implemented here... 
} 

class VeryConcrete extends MoreConcrete { 
    public function b() { do_stuff(); } 

} 

abstract class extends abstract class in php?が答えを与えるものではありません)

+1

ここに質問する前に実際にコードを実行しましたか? – Yoshi

+0

@Jakub私はそれが私の知識まで可能だと思います – Exhausted

+1

はい。うまく行かなかった。なぜなら、第2のクラスでは、「抽象的な公開関数b();」のためです。それがなければそれは行く。質問は –

答えて

35

はい、これが可能です。

サブクラスが抽象スーパークラスのすべての抽象メソッドを実装していない場合は、それも抽象スーパークラスでなければなりません。

+1

は '抽象的な公開関数b();'なしで働いています...応答、ありがとう –

+0

定義の順序が重要であることに注意してください。あなたがクラスVeryConcreteを最初に置くと、あなたは '致命的なエラー:Class' MoreConcrete 'not found'というエラーが出ます。馬の前に抽象カートを置かないように注意してください。 – RightHandedMonkey

5

はい、それはあなたが$VeryConcreteObject->b()

Hereを呼び出した場合、あなたのコードが動作しないことは可能であるが、より詳細に説明します。

3

抽象関数b()を残しても機能します。 MoreConcreteクラスにあります。

しかし、この特定の例では、メソッド定義のそばに実装がないため、クラス「Generic」をインタフェースに変換します。

interface Generic { 
    public function a(); 
    public function b(); 
} 

abstract class MoreConcrete implements Generic { 
    public function a() { do_stuff(); } 
    // can be left out, as the class is defined abstract 
    // abstract public function b(); 
} 

class VeryConcrete extends MoreConcrete { 
    // this class has to implement the method b() as it is not abstract. 
    public function b() { do_stuff(); } 
} 
関連する問題