検索

ホームページ  >  に質問  >  本文

php - 親クラスのプロパティとメソッドをオーバーライドするサブクラスが親クラスのプロパティとメソッドをオーバーライドしないのはなぜですか?

1. 継承は参照によって渡されるのに、サブクラスが親クラスのプロパティとメソッドをオーバーライドして、親クラスのプロパティとメソッドが変更されないのはなぜですか。 継承された参照の転送とはどのような状況で親クラスのメンバー メソッドとメンバー プロパティが変更されるのでしょうか?

2. 静的プロパティ、メソッド、定数は静的領域にあるのに、サブクラスで書き換えても元のプロパティと変数が上書きされないのはなぜですか?

3. 新しく編集された質問 - 静的領域について - オブジェクトオブジェクトにはメンバー変数のみが存在し、ヒープにはメンバーメソッドのアドレスのみが存在し、メンバーメソッドとクラスはコード領域に存在することは誰もが知っています。 、および静的メンバー メソッドはメンバー メソッドとは異なります。静的メンバー メソッドは、obj->static メンバー変数はエラーを報告しますが、obj->static メンバー メソッドは正常に呼び出すことができます。これはなぜですか? コード領域、静的領域、オブジェクトの関係について教えてください。 ! ! ! !

PHP中文网PHP中文网2751日前1094

全員に返信(8)返信します

  • 滿天的星座

    滿天的星座2017-05-16 13:13:34

    上記の答えはどれも的を射たものではありません。 Baidu を自分で: 遅延バインディングと早期バインディングについても、継承とポリモーフィズムに関する tij の知識を参照してください。

    返事
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:13:34

    このように理解してみると、継承は参照によって渡され、サブクラスは継承された親クラスであり、親クラスのプロパティとメソッドであるため、親クラスのすべてのプロパティとメソッドはメモリ内に存在する必要があります。
    ただし、サブクラスで親クラスのメソッドをオーバーライドする場合、実際には、ポインタを親クラスの a() メソッドからサブクラスのオーバーライドされた a() に移動するのと同じです。 ) は、親クラスの a() メソッドをメモリから実際に置き換えるのではなく、まだ存在します。

    継承された参照の受け渡し: メモリ内に親クラスのコードのコピーが 1 つだけあることを意味します。たとえば、メモリ アドレスは 0x000010 であり、サブクラスが継承する場合、親クラスのコードはこのメモリ アドレスから直接読み取られます。コードをメモリに再コピーする代わりに。

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 13:13:34

    動的バインディング メカニズムを見てみましょう。サブクラスと親クラスは、メソッド領域に 2 つの別個のメソッド テーブルとそれぞれのデータ型を形成します。 。 。カバーしません

    返事
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:13:34

    継承に関する個人的な理解:
    親クラスがすでに持っているメソッド、親クラスを継承するサブクラスはデフォルトでそれらを持ちます (メソッドと属性)。ただし、サブクラスは親クラスのメソッドをオーバーライドすることを選択できます。この場合、サブクラスがこれらのオーバーライドされたメソッドを呼び出すと、サブクラスによって変更されたメソッドの呼び出しが優先されます。親クラスのメソッドがデフォルトで呼び出されます。
    投稿者が参照による継承について述べたことについては、継承するとき、これらのメソッドと属性はデフォルトで親クラスを指すと個人的には思いますが、実際に呼び出すと、サブクラスがメソッドまたは属性をオーバーライドしたかどうかが検出されます。親クラスの。Yes の場合、実際の呼び出しはサブクラスによってオーバーライドされたメソッドとプロパティを指します。そうでない場合でも、親クラスのメソッドとプロパティを指します。
    個人的な謙虚な意見...

    返事
    0
  • 迷茫

    迷茫2017-05-16 13:13:34

    サブクラスは継承された親クラスです。サブクラスは親クラスの属性とメソッドを継承できますが、親クラスを変更することはできません。ただし、サブクラスの場合、親クラスは複数のサブクラスを持つことができます。親を変更する クラス自体の属性やメソッドは、再度新しいメソッドや属性を継承する必要はないのでしょうか?解決策はありません。 。 。

    返事
    0
  • 高洛峰

    高洛峰2017-05-16 13:13:34

    サブクラスは親クラスのみをオーバーライドできます。コードは最初にサブクラス内のメソッドを実行し、親クラスのオーバーライドされたメソッドの実行を継続することはありません。

    返事
    0
  • PHPz

    PHPz2017-05-16 13:13:34

    PHP 言語の継承は上位から下位へのみ継承でき、逆に上書きすることはできません

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:13:34

    親クラスのメソッドを継承します。これは、親クラスのメソッドをすべて自分のクラスに書き込むことと同じですが、既存のメソッドと競合するメソッドについては、書き込まないだけです。つまり、親クラスがそれを持っていて、それを持っていない場合は、親クラスがそれを持っている場合は、あなたもそれを持っているため、それはあなたに基づいて継承されます。

    返事
    0
  • キャンセル返事