1

クラスの継承を理解しようとしています。

次のコード (PHP) があるとします。

class A {
     public function fire() {
        echo "Fire!";
     } 
}

class B extends A {
     public function water() {
        echo "Water!";
     }
}

class C extends B {
     public function lightning() {
         echo "Lightning!";
     }
}

$cObject = new C();

$cObject->fire();  

私の質問は

  • fire() メソッドはクラス C にもクラス B にも定義されていませんが、$cObject->fire() は機能します。クラス C は、クラス B のメソッドだけでなく、クラス A のメソッドも継承しますか? 私は何レベルの深い継承が行われるかを調べようとしています。
  • 現在のオブジェクト インスタンスには存在しないが、このプロパティまたはメソッドは親クラスまたは祖先クラスに存在するプロパティまたはメソッドを呼び出す用語はありますか? 編集: つまり、fire() はクラス C で定義されていませんが、$cObject は引き続き fire() を呼び出すことができます。この概念を表す特定の用語/専門用語はありますか? (または、「クラス継承」の定義の一部にすぎませんか)
4

2 に答える 2

1

1) クラス「B」は「A」です。クラス「C」は「B」なので、「C」は「A」です。「B」が「A」で権利と特権を持っているものはすべて、「C」も持っています。C++ にはプライベート継承の概念があり、ここでは少し変わっていますが、それが一般的な考え方です。他の回答で述べたように、継承はチェーンが定義されている限り続きます。

2)「派生クラスではなく、基本クラスで定義されている関数とは何ですか。 このタイプの関数は仮想関数と呼ばれます。私が理解していることから、PHPのすべてのクラス関数は仮想関数であり、 finalとして宣言されていない限り、オーバーライド (派生クラスで再実装) できます。

于 2013-07-23T18:45:59.107 に答える