JavaRush /Blog Java /Random-MS /Soalan dan Jawapan: Adakah mungkin untuk menentukan kaeda...

Soalan dan Jawapan: Adakah mungkin untuk menentukan kaedah abstrak dalam kelas akhir?

Diterbitkan dalam kumpulan
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 finaldalam bahasa Jawa , dia keliru dengan perkataan soalan itu. Jawapannya mudah: tidak, finaltidak 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 finalanda tidak boleh membuat kelas abstrak dalam bahasa Java. finalIni bermakna bahawa tidak boleh ada kaedah abstrak dalam kelas Java.
Soalan dan Jawapan: Adakah mungkin untuk menentukan kaedah abstrak dalam kelas akhir?  - 1
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 finaldalam 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 finaltidak mungkin untuk mengisytiharkan kaedah abstrak dalam -class. Mari Hello.javakita mempunyai public finalkelas 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 Helloia mestilah kelas abstrak supaya kaedah abstrak boleh diisytiharkan di dalamnya.
Soalan dan Jawapan: Adakah mungkin untuk menentukan kaedah abstrak dalam kelas akhir?  - 2
Soalan dan Jawapan: Adakah mungkin untuk menentukan kaedah abstrak dalam kelas akhir?  - 3
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 finaldalam 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 finalkelas 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 Hellokaedah 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[]) {
     // Howой-то code
  }
}
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 finalkelas. 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.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION