JavaRush /Blog Java /Random-MS /10 Kelas Abstrak dan Antara Muka Soalan Temuduga Java

10 Kelas Abstrak dan Antara Muka Soalan Temuduga Java

Diterbitkan dalam kumpulan
Kelas dan antara muka abstrak sangat popular dalam semua bahasa pengaturcaraan berorientasikan objek. Dan dalam hampir setiap temu bual Java anda menemui sekurang-kurangnya satu soalan mengenai topik ini. Antara muka disebut lebih kerap kerana popularitinya di kalangan pereka perisian, tetapi soalan tentang kelas abstrak juga muncul dari semasa ke semasa. Yang terakhir ini paling kerap ditanya kepada pemohon untuk jawatan pembangun junior, katakan, dengan tidak lebih daripada dua tahun pengalaman dalam pembangunan Java, manakala soalan mengenai antara muka paling kerap ditemui semasa temu bual dengan mereka yang pengalamannya telah melebihi empat tahun. Mereka biasanya ditanya bersama-sama dengan soalan lain tentang corak reka bentuk Java, seperti corak Penghias atau Kilang. 10 Kelas Abstrak dan Antara Muka Soalan Temuduga Java - 1Dalam artikel ini, kita akan melihat soalan biasa tentang kelas abstrak dan antara muka yang ditanya pada pelbagai peringkat temu bual Java. Kebanyakan daripada mereka tidak sepatutnya sukar walaupun untuk pengaturcara Java yang baru. Ini kebanyakannya soalan pengetahuan tulen, tetapi sesetengah daripadanya, seperti perbezaan antara kelas abstrak dan antara muka dalam Java, atau bila hendak memilih kelas abstrak berbanding antara muka , boleh menjadi agak rumit. Kami menawarkan anda sedozen soalan menarik mengenai topik ini.
Jika anda pernah ditanya soalan dalam temu bual atau terpaksa bertanya apa-apa soalan berfaedah tentang kelas dan antara muka abstrak, tetapi ia tiada dalam senarai ini, sila kongsikannya dalam ulasan.

1. Bolehkah kelas abstrak mempunyai pembina dalam Java?

Ya, dalam kelas abstrak di Java anda boleh mengisytiharkan dan menentukan pembina. Memandangkan mustahil untuk mencipta contoh kelas abstrak, pembina sedemikian boleh dipanggil hanya apabila membentuk rantaian pembina, iaitu, apabila mencipta contoh kelas pelaksanaan tertentu. Tetapi bayangkan bahawa penemuduga kemudian bertanya soalan: apa gunanya pembina jika anda tidak boleh membuat contoh kelas abstrak? Intinya ialah ia masih boleh digunakan untuk menetapkan nilai awal pembolehubah biasa yang diisytiharkan dalam kelas abstrak dan digunakan oleh pelbagai pelaksanaan. Walaupun anda tidak mengisytiharkan sebarang pembina, pengkompil akan menambah pembina tanpa hujah lalai kepada kelas abstrak. Tanpanya, subkelas anda tidak akan dikompil kerana pernyataan pertama dalam mana-mana pembina ialah panggilan tersirat super()kepada pembina superclass lalai di Java.

2. Bolehkah kelas abstrak dalam Java melaksanakan antara muka? Adakah mereka perlu melaksanakan semua kaedah?

Ya, kelas abstrak boleh melaksanakan antara muka menggunakan implements. Oleh kerana ia adalah abstrak, mereka tidak perlu melaksanakan semua kaedah. Mempunyai kelas asas abstrak dan antara muka untuk mengisytiharkan jenis adalah amalan yang disyorkan. Contohnya ialah antara muka java.util.Listdan kelas abstrak yang sepadan java.util.AbstractList. Kerana AbstractListia melaksanakan semua kaedah biasa, pelaksanaan khusus (seperti LinkedListdan ArrayList) tidak perlu melaksanakan semua kaedah, seperti yang akan berlaku jika mereka melaksanakan antara muka Listsecara langsung. Penyelesaian ini menggabungkan faedah menggunakan antara muka untuk mengisytiharkan jenis dengan fleksibiliti kelas abstrak untuk melaksanakan semua tingkah laku biasa di satu tempat. Dalam buku Joshua Bloch "Java. Pengaturcaraan Berkesan” mempunyai bab yang sangat baik mengenai topik penggunaan antara muka dan kelas abstrak dalam Java, untuk pemahaman yang lebih baik adalah masuk akal untuk mengkajinya.

3. Bolehkah kelas abstrak menjadi muktamad?

Tidak dia tak boleh. Kata kunci finalbermaksud bahawa kelas berada di bahagian atas hierarki dan tidak boleh mempunyai keturunan. Dan kelas abstrak tanpa waris adalah kuda sfera dalam vakum, kerana mustahil untuk mencipta contoh abstract class. Oleh itu, jika kelas ialah kedua-duanya abstractdan final, maka ia tidak mempunyai keturunan dan tidak boleh dijadikan instantiated. Pengkompil Java akan membuang ralat jika anda membuat kelas abstractdan final.

4. Bolehkah kelas abstrak dalam Java mempunyai kaedah statik?

Ya, kelas abstrak boleh mengisytiharkan dan menentukan kaedah statik. Ia hanya perlu mengikut prinsip am untuk mencipta kaedah statik di Java, kerana ia tidak diingini dalam reka bentuk berorientasikan objek, kerana kaedah statik mengatasi di Java tidak mungkin. Kaedah statik dalam kelas abstrak sangat jarang berlaku, tetapi jika terdapat sebab yang baik untuknya, tiada apa yang menghalang anda daripada menggunakannya.

5. Adakah mungkin untuk membuat instantiate kelas abstrak?

Tidak, anda tidak boleh melakukan ini. Intipati kelas abstrak ialah ia tidak lengkap, dan ia perlu dilengkapkan dalam kelas turunannya. Maksudnya, kelas ini belum sedia untuk digunakan. Sebagai contoh, ia mungkin kekurangan pelaksanaan beberapa kaedah. Memandangkan kelas tidak bersedia untuk digunakan, objeknya tidak boleh dibuat. Tetapi anda boleh mencipta contoh pewaris kelas abstrak. Pengkompil Java akan melemparkan ralat jika program cuba membuat instantiate kelas abstrak.

6. Adakah perlu untuk kelas abstrak mempunyai kaedah abstrak?

Tidak, kelas abstrak mungkin tidak mempunyai sebarang kaedah abstrak. Anda boleh membuat abstrak kelas dalam Java hanya dengan menggunakan kata kunci abstractdalam pengisytiharannya. Pengkompil akan menguatkuasakan sebarang sekatan struktur, seperti tidak membenarkan instantiasi kelas ini dibuat. Dengan cara ini, persoalan sama ada perlu ada kaedah abstrak dalam kelas atau antara muka abstrak adalah kontroversi. Nampaknya saya kelas abstrak harus mempunyai kaedah abstrak, kerana ini adalah perkara pertama yang difikirkan oleh pengaturcara apabila melihat kelas abstrak. Ini sesuai dengan prinsip meminimumkan kejutan.

7. Apakah perbezaan antara kelas abstrak dan antara muka dalam Java?

Ini adalah yang paling penting dan salah satu soalan wawancara Java yang paling klasik. Saya tidak dapat mengira berapa kali saya telah melihat soalan ini dalam temu bual Java di semua peringkat. Apa yang membuatkan soalan ini menarik ialah, khususnya, peluang untuk pemohon memberikan contoh. Menjawab soalan tentang asas pengaturcaraan berorientasikan objek, seperti abstraksi, enkapsulasi, polimorfisme dan pewarisan, adalah mudah, tetapi apabila menyentuh nuansa halus seperti itu, pemohon kerja sering keliru dan mengatakan perkara pertama yang terlintas di fikiran. Jawapan kepada soalan ini memerlukan artikel berasingan (terutamanya selepas perubahan dalam Java 8), bagaimanapun, secara ringkas:
  • Antara muka menerangkan hanya tingkah laku (kaedah) objek, tetapi ia tidak mempunyai keadaan (medan) (kecuali public static final), manakala kelas abstrak boleh memilikinya.

  • Kelas abstrak diwarisi (melanjutkan), dan antara muka dilaksanakan (melaksanakan). Kita boleh mewarisi hanya satu kelas, tetapi melaksanakan seberapa banyak antara muka yang kita suka. Antara muka boleh memanjangkan (melanjutkan) antara muka/antara muka lain.

  • Kelas abstrak digunakan apabila terdapat hubungan "is-a", iaitu subkelas memanjangkan kelas abstrak asas, dan antara muka boleh dilaksanakan oleh kelas yang berbeza yang tidak berkaitan langsung antara satu sama lain.

8. Bilakah masuk akal untuk memilih kelas abstrak daripada antara muka dan sebaliknya?

Ini adalah kesinambungan soalan sebelumnya mengenai kelas abstrak dan antara muka. Jika anda tahu apakah perbezaan sintaksis mereka, maka menjawab soalan ini tidak akan menyebabkan anda masalah, kerana ia adalah faktor penentu dalam membuat keputusan. Memandangkan hampir mustahil untuk menambah kaedah baharu pada antara muka yang diterbitkan, lebih baik menggunakan kelas abstrak sekiranya terdapat keperluan untuk pembangunan selanjutnya. Membangunkan kelas abstrak dalam Java adalah lebih mudah daripada membangunkan antara muka. Begitu juga, jika antara muka mempunyai terlalu banyak kaedah dan melaksanakan semuanya menjadi sakit kepala yang nyata, adalah lebih baik untuk mencipta kelas abstrak untuk pelaksanaan lalai. Corak ini diikuti dalam pakej koleksi Java, kelas abstrak AbstractListmenyediakan pelaksanaan lalai untuk List. Gunakan kelas abstrak jika:
  • Anda ingin berkongsi kod antara beberapa kelas yang berkait rapat.

  • Anda menjangkakan kelas yang memanjangkan kelas abstrak anda mempunyai banyak kaedah atau medan yang sama, atau memerlukan pengubah akses selain daripada public(contohnya, protecteddan private).

  • Anda ingin mengisytiharkan bukan statik atau не-finalmedan. Ini membolehkan anda menentukan kaedah yang boleh mengakses dan mengubah keadaan objek yang menjadi miliknya.
Gunakan antara muka jika:
  • Anda mengharapkan kelas yang tidak berkaitan untuk melaksanakan antara muka anda. Sebagai contoh, antara muka Comparabledan Cloneabledilaksanakan oleh banyak kelas yang tidak berkaitan.

  • Anda ingin menentukan gelagat jenis data tertentu, tetapi anda tidak peduli siapa yang melaksanakannya.

  • Anda mahu menggunakan warisan berbilang jenis.

9. Apakah kaedah abstrak dalam Java?

Kaedah abstrak ialah kaedah tanpa badan. Anda hanya mengisytiharkan kaedah tanpa mentakrifkannya, menggunakan kata kunci abstractdalam pengisytiharan kaedah. Semua kaedah yang diisytiharkan di dalam antara muka dalam bahasa Java adalah abstrak secara lalai. Berikut ialah contoh kaedah abstrak dalam Java:
public void abstract printVersion();
Sekarang, untuk melaksanakan kaedah ini, anda perlu melanjutkan kelas abstrak dan mengatasi kaedah ini.

10. Bolehkah kelas abstrak dalam Java mengandungi kaedah main?

Ya, kelas abstrak dalam Java boleh mengandungi kaedah main, kerana ia hanyalah satu lagi kaedah statik, dan kelas abstrak boleh dilaksanakan menggunakan kaedah main, selagi anda tidak membuat seketika. Itu sahaja yang saya ingin beritahu awak. Dan ingat: kelas abstrak dan antara muka ialah keputusan reka bentuk utama dalam analisis berorientasikan objek dan proses reka bentuk, dan harus digunakan dengan berhati-hati, sudah tentu, jika anda ingin mencipta sistem yang fleksibel.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION