Pertanyaan menarik dan penting ini ditanyakan kepada salah satu pembaca saya selama wawancara telepon untuk posisi pengembang Java. Meskipun dia tahu bahwa tidak mungkin membuat kelas abstrak
Banyak pengembang Java yang bingung ketika menjawab pertanyaan ini karena kata-katanya. Meskipun orang yang mengajukan pertanyaan sudah familiar dengan konsep umum, dia mungkin tidak menyadari bahwa suatu kelas, setelah mendeklarasikan metode abstrak di dalamnya, menjadi abstrak, dan Anda tidak dapat membuat kelas abstrak
Hal yang sama akan terjadi jika Anda mengetik kode ini di Notepad dan mengkompilasinya menggunakan utilitas javac dari baris perintah. Menurut spesifikasi Java, segera setelah Anda mendeklarasikan metode abstrak di dalam suatu kelas, kelas tersebut menjadi kelas abstrak, dan karena Anda tidak dapat membuat kelas abstrak
final
dalam bahasa Java , dia bingung dengan susunan kata dari pertanyaannya. Jawabannya sederhana: tidak, final
tidak mungkin ada metode abstrak di kelas -. Mengapa? Karena begitu Anda mendeklarasikan metode abstrak pada kelas bahasa Java, otomatis kelas tersebut menjadi abstrak, dan final
Anda tidak dapat membuat kelas abstrak dalam bahasa Java. final
Artinya tidak boleh ada metode abstrak di kelas Java.
final
di Java. Poin ini memisahkan pertanyaan ini dari pertanyaan yang lebih umum dan sering diajukan: apakah mungkin di Java mendeklarasikan suatu kelas menjadi abstrak dan final pada saat yang bersamaan? Mari kita lihat salah satu contoh kode untuk menunjukkan bahwa final
tidak mungkin mendeklarasikan metode abstrak di kelas -. Mari Hello.java
kita punya public final
kelas bernama Hello
, yang memiliki metode abstrak print()
.
public final class Hello {
public abstract void print();
}
Ketik kode ini ke dalam IDE, Anda akan menerima pesan kesalahan berikut, katanya Hello
harus kelas abstrak agar metode abstrak dapat dideklarasikan di dalamnya.
final
di Java, kompiler akan menghasilkan kesalahan. Hal ini berlaku untuk kelas tingkat atas dan kelas bersarang dalam bahasa Java. Bahkan jika Anda mendeklarasikan metode abstrak di final
kelas bersarang, kesalahannya akan tetap sama. Pertanyaan terkait lainnya adalah: bisakah kelas abstrak di Java memiliki metode statis? Jawaban: ya, bisa, tidak ada masalah dengan mendeklarasikan metode statis di kelas abstrak, karena untuk menggunakan metode statis Anda tidak perlu membuat instance kelas, mereka dapat dipanggil cukup menggunakan nama kelas. Kita dapat memodifikasi contoh kita untuk memasukkan Hello
metode ke dalam kelas main()
, yang bersifat statis di Java, seperti yang ditunjukkan di bawah ini:
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
// Howой-то code
}
}
Seperti yang Anda lihat, tidak ada kesalahan kompilasi yang terjadi. Kode ini dapat dikompilasi tanpa masalah, karena di Java Anda dapat mendeklarasikan metode statis dengan aman di kelas abstrak. Kesimpulan singkat Tidak mungkin mendeklarasikan metode abstrak di kelas final
-. Karena begitu Anda melakukan ini, otomatis kelas menjadi abstrak, sesuai spesifikasi Java. Dan karena final
kelas - di Java tidak boleh abstrak, hal ini tidak dapat diterima, dan kompiler akan melarang Anda melakukan ini dengan membuat kesalahan. Tapi Anda bisa mendeklarasikan metode statis baik di kelas final maupun abstrak, tidak ada masalah dengan ini.
Apa lagi yang harus dibaca? |
---|
Cara mudah untuk memasukkan dependensi Perbedaan antara pengikatan awal dan pengikatan akhir di Jawa |
GO TO FULL VERSION