Soalan menarik dan penting ini ditanya kepada salah seorang pembaca saya semasa temu bual telefon untuk jawatan pembangun Java. Walaupun dia tahu bahawa adalah mustahil
untuk membuat kelas abstrak final
dalam bahasa Jawa , dia keliru dengan perkataan soalan itu. Jawapannya mudah: tidak,
final
tidak boleh ada kaedah abstrak dalam -class. kenapa? Kerana sebaik sahaja anda mengisytiharkan kaedah abstrak dalam kelas bahasa Java, kelas ini secara automatik menjadi abstrak dan
final
anda tidak boleh membuat kelas abstrak dalam bahasa Java.
final
Ini bermakna bahawa tidak boleh ada kaedah abstrak dalam kelas Java.
Ramai pembangun Java menjadi keliru apabila menjawab soalan ini kerana perkataan. Walaupun orang yang bertanya soalan itu biasa dengan konsep umum, dia mungkin tidak menyedari bahawa kelas, selepas mengisytiharkan kaedah abstrak di dalamnya, menjadi abstrak, dan anda tidak boleh membuat kelas abstrak
final
dalam Java. Perkara ini memisahkan soalan ini daripada soalan yang lebih biasa dan sering ditanya:
adakah mungkin di Jawa untuk mengisytiharkan kelas sebagai abstrak dan muktamad pada masa yang sama? Mari lihat satu contoh kod untuk menunjukkan bahawa
final
tidak mungkin untuk mengisytiharkan kaedah abstrak dalam -class. Mari
Hello.java
kita mempunyai
public final
kelas dipanggil
Hello
, yang mempunyai kaedah abstrak
print()
.
public final class Hello {
public abstract void print();
}
Taipkan kod ini ke dalam IDE, anda akan menerima mesej ralat berikut, mereka mengatakan
Hello
ia mestilah kelas abstrak supaya kaedah abstrak boleh diisytiharkan di dalamnya.
Perkara yang sama akan berlaku jika anda menaip kod ini dalam Notepad dan menyusunnya menggunakan utiliti javac dari baris arahan. Menurut spesifikasi Java, sebaik sahaja anda mengisytiharkan kaedah abstrak di dalam kelas, kelas itu menjadi kelas abstrak, dan kerana anda tidak boleh membuat kelas abstrak
final
dalam Java, pengkompil akan menghasilkan ralat. Ini benar untuk kedua-dua kelas peringkat atas dan kelas bersarang dalam bahasa Java. Walaupun anda mengisytiharkan kaedah abstrak dalam
final
kelas bersarang, ralatnya akan sama. Soalan lain yang berkaitan ialah:
bolehkah kelas abstrak di Jawa mempunyai kaedah statik? Jawapan: ya, mereka boleh, tidak ada masalah dengan mengisytiharkan kaedah statik dalam kelas abstrak, kerana untuk menggunakan kaedah statik anda tidak perlu membuat contoh kelas, mereka boleh dipanggil hanya menggunakan nama kelas. Kami boleh mengubah suai contoh kami untuk memasukkan
Hello
kaedah dalam class
main()
, yang statik dalam Java, seperti ditunjukkan di bawah:
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
}
}
Seperti yang anda lihat, tiada ralat kompilasi dilemparkan. Kod ini disusun tanpa masalah, kerana dalam Java anda boleh mengisytiharkan kaedah statik sepenuhnya dalam kelas abstrak dengan selamat.
Kesimpulan ringkas Adalah mustahil untuk mengisytiharkan kaedah abstrak dalam
final
kelas. Kerana sebaik sahaja anda melakukan ini, kelas secara automatik menjadi abstrak, mengikut spesifikasi Java. Dan kerana
final
-class dalam Java tidak boleh abstrak, ini tidak boleh diterima, dan pengkompil akan melarang anda daripada melakukan ini dengan membuang ralat. Tetapi anda boleh mengisytiharkan kaedah statik dalam kedua-dua kelas akhir dan abstrak, tidak ada masalah dengan ini.
GO TO FULL VERSION