Kelas abstrak kelihatan seperti antara muka, tetapi konsepnya agak mengelirukan untuk pemula OOP. Secara konseptual, kelas abstrak kelihatan seperti antara muka, tentu saja, tanpa sebarang pelaksanaan, namun mereka mempunyai perbezaan yang saksama. Walaupun kelas abstrak boleh sama ada sebahagian atau sepenuhnya dilaksanakan, antara muka mesti dilaksanakan sepenuhnya. Well, perbezaan yang paling ketara antara kedua ialah kelas abstrak boleh mempunyai pelaksanaan lalai, manakala antara muka hanya definisi kaedah yang mengandungi hanya pernyataan anggota. Mari kita bincangkan aspek teori secara terperinci.
Kelas abstrak adalah jenis kelas khas yang bertindak sebagai asas kelas-kelas lain dan tidak dapat diterapkan. Logik pelaksanaan kelas abstrak disediakan oleh kelas asalnya. Untuk membuat abstrak kelas, pengubahsuaian "abstrak" digunakan yang bermaksud beberapa pelaksanaan yang hilang perlu dilaksanakan dalam kelas yang diperoleh daripadanya. Ia mengandungi ahli abstrak dan bukan abstrak. Kelas abstrak bertujuan menyediakan fungsi asas yang boleh dikongsi dan ditindih oleh banyak kelas yang diturunkan. Ia berguna untuk mengelakkan sebarang jenis duplikasi kod. Mereka kelihatan sangat seperti antara muka tetapi dengan fungsi tambahan.
Antara muka, sebaliknya, bukan kelas yang hanya mengandungi tandatangan fungsi. Ini corak tanpa pelaksanaan. Secara konseptual, ia hanya definisi kaedah yang mengandungi hanya pengisytiharan ahli. Ia adalah shell kosong yang tidak mengandungi pelaksanaan ahli-ahlinya. Ia seperti kelas asas abstrak yang hanya mengandungi ahli abstrak seperti kaedah, peristiwa, pengindeks, harta, dll. Ia tidak boleh instantiated secara langsung dan ahli-ahlinya boleh dilaksanakan oleh mana-mana kelas. Di samping itu, pelbagai antara muka boleh dilaksanakan oleh kelas, bagaimanapun, kelas hanya boleh mewarisi satu kelas.
Kelas Abstrak | Antara muka |
Kelas abstrak boleh mempunyai semua pengubah akses untuk perisytiharan fungsi fungsi, subs, dan sifat. | Antara muka tidak dibenarkan untuk mempunyai pengubah akses untuk perisytiharan fungsi fungsi, subs, sifat, dll. Semua ahli diandaikan secara tersirat umum. |
Kelas boleh digunakan hanya dengan satu kelas abstrak. | Kelas boleh mewarisi mana-mana bilangan antara muka. |
Warisan berbilang tidak disokong dalam kelas abstrak. | Antara muka boleh menyokong banyak warisan. |
Secara teknikalnya, ia adalah kelas yang mungkin atau mungkin tidak mengandungi definisi dan pelaksanaannya. | Antara muka hanya boleh mempunyai tandatangan fungsi sehingga pada asasnya shell kosong. |
Kelas abstrak boleh mengandungi ahli. const, kaedah yang ditetapkan, dan kaedah stub. | Antara muka hanya boleh mengandungi kaedah dan sebutan. |
Ia mendefinisikan identiti teras kelas dan digunakan untuk menggambarkan objek jenis data yang sama. | Ia digunakan untuk menggambarkan kebolehan periferi kelas. |
Ahli-ahli kelas abstrak tidak boleh statik melainkan ia merupakan Ahli Lengkap. | Ahli antara muka tidak boleh statik. |
Ia sesuai untuk pelaksanaan tingkah laku yang sama dan biasa. | Adalah lebih baik untuk menggunakan antara muka sekiranya beberapa perlaksanaan hanya berkongsi tandatangan kaedah. |
Ia boleh mempunyai pengisytiharan konstruktor. | Ia tidak boleh mempunyai pengisytiharan konstruktor. |
Kelas abstrak mempunyai bidang dan pembentuk yang telah ditentukan sebelumnya. | Bidang tidak boleh ditakrifkan dalam antara muka. |
Ia boleh mempunyai kedua-dua kaedah abstrak dan bukan abstrak. | Ia hanya boleh mempunyai kaedah abstrak. |
Apakah perbezaan antara kelas abstrak dan antara muka? Ini mungkin salah satu soalan paling biasa yang ditanya dalam sebarang wawancara teknikal. Anda mungkin mendapati kebanyakan maklumat mengenai kelas abstrak dan antara muka dalam mana-mana tutorial C #, bagaimanapun, memahami perbezaan antara kedua-dua adalah bahagian yang sukar. Anda boleh menyatukan semua maklumat yang anda dapati dan masih tidak dapat mencukupi. Baiklah, secara konseptual kedua-duanya adalah istilah yang paling penting dalam pengaturcaraan dan agak sama, bagaimanapun, mereka berbeza jauh dari segi fungsinya. Walaupun kelas abstrak adalah kelas khas kelas yang bertindak sebagai pangkalan untuk kelas-kelas lain, antara muka, sebaliknya, hanyalah cangkerang kosong dengan hanya pernyataan anggota.