Rumah >pembangunan bahagian belakang >C++ >Apakah perbezaan antara kata kunci `new` dan` override` dalam warisan kaedah?

Apakah perbezaan antara kata kunci `new` dan` override` dalam warisan kaedah?

DDD
DDDasal
2025-01-28 11:56:09218semak imbas

What's the Difference Between `new` and `override` Keywords in Method Inheritance?

dalam pemahaman mengenai kata kunci "baru" dan "override"

Dalam pengaturcaraan yang berorientasikan objek, warisan adalah konsep teras, yang membolehkan derivatif mengembangkan dan mengubah suai tingkah laku kelas asas. Apabila menentukan kelas ini, pemaju mungkin perlu menulis semula atau membuat pelaksanaan baru. Untuk menjelaskan perbezaan ini, mari kita periksa adegan berikut:

adegan 1: kelas asas

Tatabahasa ini mengisytiharkan kaedah maya dalam kelas asas. Kaedah maya boleh ditulis semula dalam kategori derivatif untuk menyediakan pelaksanaan tertentu.

<code class="language-c#">public virtual void DoIt();</code>
adegan 1: kelas bahagian

Dalam kaedah yang diperoleh, penggunaan "baru" akan mewujudkan kaedah baru dan bebas, dan namanya sama dengan kaedah dalam kelas asas. Walau bagaimanapun, ini tidak dianggap ditulis semula, dan apabila kelas asas dipanggil, tingkah laku kaedah kelas asas tidak akan menjejaskan tingkah laku kelas asas.

adegan 2: kelas asas
<code class="language-c#">public new void DoIt();</code>

Ini adalah kaedah bukan futant dan tidak boleh ditulis semula dalam kelas yang diperolehi. Derivatif mesti menggunakan pengubah "baru" untuk mencapai kaedah baru dengan nama yang sama. adegan 2: kelas bahagian

<code class="language-c#">public void DoIt();</code>

"Mengatasi" pengubahsuaian menunjukkan bahawa kaedah dalam kelas derivatif menulis semula kaedah lain tandatangan yang sama di kelas asas. Apabila memanggil dipanggil oleh kelas asas, kaedah penulisan semula akan dilaksanakan.

perbezaan sebenar

<code class="language-c#">public override void DoIt();</code>

Mengatasi:

Tidak kira apa jenis rujukan, selagi kaedah dipanggil, kaedah penulisan semula dalam kelas yang diperolehi akan dipanggil.

new: Hanya apabila objek kelas yang diperolehi dirujuk, kaedah baru yang dibuat dalam kelas yang diperolehi dipanggil.

  • Penggunaan yang disyorkan
  • Biasanya, apabila tingkah laku kaedah warisan yang dilanjutkan disyorkan, "mengatasi" adalah disyorkan. Jika anda ingin membuat kaedah baru dengan nama yang sama dalam kelas yang diperolehi, gunakan "Baru".
  • Contoh
Pertimbangkan kod berikut:

Dalam contoh ini, "derived.doit ()" ditulis semula "base.doit ()", dan apabila kaedah "b" pembolehubah "DOIT ()" dipanggil dari objek "b" pembolehubah "yang diperolehi" akan dipanggil untuk memanggilnya.

Atas ialah kandungan terperinci Apakah perbezaan antara kata kunci `new` dan` override` dalam warisan kaedah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn