JavaRush /Java Blog /Random-ID /10 Kelas Abstrak dan Antarmuka Pertanyaan Wawancara Java

10 Kelas Abstrak dan Antarmuka Pertanyaan Wawancara Java

Dipublikasikan di grup Random-ID
Kelas abstrak dan antarmuka sangat populer di semua bahasa pemrograman berorientasi objek. Dan di hampir setiap wawancara Java Anda menemukan setidaknya satu pertanyaan tentang topik ini. Antarmuka lebih sering disebutkan karena popularitasnya di kalangan perancang perangkat lunak, namun pertanyaan tentang kelas abstrak juga muncul dari waktu ke waktu. Yang terakhir ini paling sering ditanyakan kepada pelamar untuk posisi pengembang junior, misalnya, yang memiliki pengalaman tidak lebih dari dua tahun dalam pengembangan Java, sementara pertanyaan tentang antarmuka paling sering ditemui selama wawancara dengan mereka yang pengalamannya telah melebihi empat tahun. Biasanya ditanyakan bersamaan dengan pertanyaan lain tentang pola desain Java, seperti pola Dekorator atau Pabrik. 10 Kelas Abstrak dan Antarmuka Pertanyaan Wawancara Java - 1Pada artikel ini, kita akan melihat pertanyaan umum tentang kelas abstrak dan antarmuka yang ditanyakan di berbagai tingkat wawancara Java. Kebanyakan darinya seharusnya tidak sulit bahkan untuk programmer Java pemula. Ini sebagian besar adalah pertanyaan pengetahuan murni, namun beberapa di antaranya, seperti perbedaan antara kelas abstrak dan antarmuka di Java, atau kapan harus memilih kelas abstrak daripada antarmuka , bisa jadi cukup rumit. Kami menawarkan selusin pertanyaan menarik tentang topik ini.
Jika Anda pernah ditanyai pertanyaan dalam sebuah wawancara atau harus mengajukan pertanyaan penting tentang kelas abstrak dan antarmuka, tetapi pertanyaan itu tidak ada dalam daftar ini, silakan bagikan di komentar.

1. Bisakah kelas abstrak memiliki konstruktor di Java?

Ya, di kelas abstrak di Java Anda bisa mendeklarasikan dan mendefinisikan konstruktor. Karena tidak mungkin membuat instance kelas abstrak, konstruktor seperti itu hanya dapat dipanggil saat membentuk rantai konstruktor, yaitu saat membuat instance kelas implementasi tertentu. Tapi bayangkan pewawancara kemudian mengajukan pertanyaan: apa gunanya konstruktor jika Anda tidak bisa membuat instance kelas abstrak? Intinya masih bisa digunakan untuk mengatur nilai awal variabel umum yang dideklarasikan di kelas abstrak dan digunakan oleh berbagai implementasi. Meskipun Anda tidak mendeklarasikan konstruktor apa pun, kompiler akan menambahkan konstruktor tanpa argumen default ke kelas abstrak. Tanpanya, subkelas Anda tidak akan dapat dikompilasi karena pernyataan pertama dalam konstruktor mana pun adalah panggilan implisit super()ke konstruktor superkelas default di Java.

2. Bisakah kelas abstrak di Java mengimplementasikan antarmuka? Apakah mereka harus menerapkan semua metode?

Ya, kelas abstrak dapat mengimplementasikan antarmuka menggunakan ekstensi implements. Karena bersifat abstrak, maka tidak diperlukan implementasi semua metode. Memiliki kelas dasar abstrak dan antarmuka untuk mendeklarasikan tipenya adalah praktik yang disarankan. Contohnya adalah antarmuka java.util.Listdan kelas abstrak yang sesuai java.util.AbstractList. Karena AbstractListmengimplementasikan semua metode umum, implementasi spesifik (seperti LinkedListdan ArrayList) tidak harus mengimplementasikan semua metode, seperti yang terjadi jika metode tersebut mengimplementasikan antarmuka Listsecara langsung. Solusi ini menggabungkan manfaat penggunaan antarmuka untuk mendeklarasikan suatu tipe dengan fleksibilitas kelas abstrak untuk mengimplementasikan semua perilaku umum di satu tempat. Dalam buku Joshua Bloch “Java. Pemrograman Efektif” memiliki bab yang sangat bagus tentang topik penggunaan antarmuka dan kelas abstrak di Java, untuk pemahaman yang lebih baik, masuk akal untuk mempelajarinya.

3. Bisakah kelas abstrak menjadi final?

Tidak, dia tidak bisa. Kata kuncinya finalberarti kelas tersebut berada di puncak hierarki dan tidak dapat memiliki keturunan. Dan kelas abstrak tanpa ahli waris adalah kuda berbentuk bola dalam ruang hampa, karena tidak mungkin membuat sebuah instance abstract class. Jadi, jika suatu kelas adalah keduanya abstractdan final, maka kelas tersebut tidak mempunyai keturunan dan tidak dapat dipakai. Kompiler Java akan memunculkan kesalahan jika Anda membuat kelas abstractdan final.

4. Bisakah kelas abstrak di Java memiliki metode statis?

Ya, kelas abstrak dapat mendeklarasikan dan mendefinisikan metode statis. Anda hanya perlu mengikuti prinsip umum pembuatan metode statis di Java, karena prinsip tersebut tidak diinginkan dalam desain berorientasi objek, karena tidak mungkin mengganti metode statis di Java. Metode statis dalam kelas abstrak sangat jarang, tetapi jika ada alasan bagus untuk itu, tidak ada yang menghentikan Anda untuk menggunakannya.

5. Apakah mungkin untuk membuat instance kelas abstrak?

Tidak, kamu tidak bisa melakukan ini. Inti dari kelas abstrak adalah tidak lengkap, dan perlu diselesaikan di kelas turunannya. Artinya, kelas ini belum siap digunakan. Misalnya, penerapan beberapa metode mungkin kurang. Karena suatu kelas belum siap digunakan, objeknya tidak dapat dibuat. Tapi Anda bisa membuat instance pewaris kelas abstrak. Kompiler Java akan memunculkan kesalahan jika suatu program mencoba membuat instance kelas abstrak.

6. Apakah kelas abstrak perlu memiliki metode abstrak?

Tidak, kelas abstrak mungkin tidak memiliki metode abstrak apa pun. Anda dapat membuat kelas abstrak di Java hanya dengan menggunakan kata kunci abstractdalam deklarasinya. Kompiler akan menerapkan batasan struktural apa pun, seperti tidak mengizinkan pembuatan instance kelas ini. Omong-omong, pertanyaan apakah harus ada metode abstrak di kelas atau antarmuka abstrak masih kontroversial. Menurut saya kelas abstrak harus memiliki metode abstrak, karena ini adalah hal pertama yang dipikirkan programmer ketika melihat kelas abstrak. Hal ini sesuai dengan prinsip meminimalkan kejutan.

7. Apa perbedaan antara kelas abstrak dan antarmuka di Java?

Ini adalah pertanyaan wawancara Java yang paling penting dan paling klasik. Saya tidak dapat menghitung berapa kali saya melihat pertanyaan ini dalam wawancara Java di semua tingkatan. Yang membuat pertanyaan ini menarik adalah, khususnya, kesempatan bagi pemohon untuk memberikan contoh. Menjawab pertanyaan tentang dasar-dasar pemrograman berorientasi objek, seperti abstraksi, enkapsulasi, polimorfisme, dan pewarisan, sangatlah mudah, tetapi jika menyangkut nuansa halus seperti itu, pelamar kerja sering kali bingung dan mengatakan hal pertama yang terlintas dalam pikiran mereka. Jawaban atas pertanyaan ini layak mendapat artikel terpisah (terutama setelah perubahan di Java 8), namun singkatnya:
  • Antarmuka hanya menjelaskan perilaku (metode) suatu objek, tetapi tidak memiliki status (bidang) (kecuali public static final), sedangkan kelas abstrak dapat memilikinya.

  • Kelas abstrak diwarisi (diperluas), dan antarmuka diimplementasikan (diimplementasikan). Kita hanya dapat mewarisi satu kelas, tetapi mengimplementasikan antarmuka sebanyak yang kita suka. Suatu antarmuka dapat memperluas (extend) antar muka/antarmuka lainnya.

  • Kelas abstrak digunakan ketika ada hubungan "is-a", yaitu subkelas memperluas kelas abstrak dasar, dan antarmuka dapat diimplementasikan oleh kelas berbeda yang sama sekali tidak terkait satu sama lain.

8. Kapan masuk akal untuk memilih kelas abstrak daripada antarmuka dan sebaliknya?

Ini merupakan kelanjutan dari pertanyaan sebelumnya tentang kelas abstrak dan antarmuka. Jika Anda mengetahui perbedaan sintaksisnya, maka menjawab pertanyaan ini tidak akan menimbulkan masalah bagi Anda, karena itulah faktor penentu dalam mengambil keputusan. Karena hampir tidak mungkin untuk menambahkan metode baru ke antarmuka yang dipublikasikan, lebih baik menggunakan kelas abstrak jika ada kebutuhan potensial untuk pengembangan lebih lanjut. Mengembangkan kelas abstrak di Java lebih mudah daripada mengembangkan antarmuka. Demikian pula, jika sebuah antarmuka memiliki terlalu banyak metode dan mengimplementasikan semuanya menjadi sangat memusingkan, lebih baik membuat kelas abstrak untuk implementasi default. Pola ini diikuti dalam paket koleksi Java, kelas abstrak AbstractListmenyediakan implementasi default untuk paket List. Gunakan kelas abstrak jika:
  • Anda ingin berbagi kode antara beberapa kelas yang terkait erat.

  • Anda akan mengharapkan kelas-kelas yang memperluas kelas abstrak Anda memiliki banyak metode atau bidang yang sama, atau memerlukan pengubah akses selain public(misalnya, protecteddan private).

  • Anda ingin mendeklarasikan не-finalbidang atau non-statis. Hal ini memungkinkan Anda untuk menentukan metode yang dapat mengakses dan mengubah status objek miliknya.
Gunakan antarmuka jika:
  • Anda mengharapkan kelas yang tidak terkait untuk mengimplementasikan antarmuka Anda. Misalnya, antarmuka Comparabledan Cloneablediimplementasikan oleh banyak kelas yang tidak terkait.

  • Anda ingin mendefinisikan perilaku tipe data tertentu, namun Anda tidak peduli siapa yang mengimplementasikannya.

  • Anda ingin menggunakan warisan tipe ganda.

9. Apa yang dimaksud dengan metode abstrak di Java?

Metode abstrak adalah metode tanpa isi. Anda cukup mendeklarasikan suatu metode tanpa mendefinisikannya, menggunakan kata kunci abstractdalam deklarasi metode. Semua metode yang dideklarasikan di dalam antarmuka dalam bahasa Java bersifat abstrak secara default. Berikut adalah contoh metode abstrak di Java:
public void abstract printVersion();
Sekarang, untuk mengimplementasikan metode ini, Anda perlu memperluas kelas abstrak dan mengganti metode ini.

10. Bisakah kelas abstrak di Java berisi metode main?

Ya, kelas abstrak di Java dapat berisi metode main, karena ini hanyalah metode statis, dan kelas abstrak dapat dieksekusi menggunakan metode tersebut main, selama Anda tidak membuat instance-nya. Hanya itu yang ingin saya sampaikan kepada Anda. Dan ingat: kelas abstrak dan antarmuka adalah keputusan desain utama dalam analisis berorientasi objek dan proses desain, dan harus digunakan dengan hati-hati, tentu saja, jika Anda ingin membuat sistem yang fleksibel.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION