Memahami Keyword Final Dalam Program Java

Kalau Anda sudah mengetahui tentang inheritance sebagai salah satu konsep penting dalam program Java maka Anda tahu bahwa dengan inheritance Anda bisa menggunakan kembali kode-kode yang sudah ada. Tapi, terkadang Anda perlu menetapkan batasan atau ektensibilitas (extend) karena beberapa alasan tertentu. Dalam hal ini, Java menyediakan keyword final untuk memenuhi tujuan tersebut.

Class Yang Dideklarasikan Sebagai Final

Ketika suatu class dideklarasikan sebagai final maka class tersebut tidak bisa diwariskan. Misalnya pada package java.lang di library Java Anda bisa melihat jika class String adalah class final.

Class String tersebut dideklarasikan sebagai:

Bisa Anda bayangkan kalau class String tersebut tidak dideklarasikan sebagai final. Maka Anda bisa saja mengoverride method-method yang dimilikinya.

keyword final Java program

Akibatnya adalah semua instance dari String itu bisa disubstitusi oleh instance yang spesifik dari subclass yang Anda miliki. Hasilnya adalah pengoperasian dari objek-objek String menjadi tidak bisa diprediksi.

Karena class String itu banyak digunakan di mana saja, tentu ini adalah sebuah hal yang tidak bisa diterima. Atas dasar inilah class String dideklarasikan sebagai final.

Jadi meng-exetend-kan class final akan menyebabkan error:

Hal yang perlu Anda perhatikan adalah ketika Anda mendeklarasikan class sebagai final, maka objek dari class tersebut tidak immutable. Dalam artian bahwa Anda bisa mengganti field dari class tersebut dengan bebas.

Contoh:

Output:

Jadi final pada class artinya class tersebut hanya tidak bisa diwariskan saja.

Class yang dideklarasikan final biasanya dilakukan karena alasan keamanan. Dalam pemrograman Java mendokumentasikan setiap class yang dibuat dengan baik merupakan good practice.

Ketika class dideklarasikan sebagai final maka itu harus berdasarkan pertimbangan yang matang.

Karena ketika suatu class dibuat final maka tidak ada programmer lain yang bisa memperbaikinya.

Contohnya ketika Anda menggunakan sebuah class final dan class tersebut tidak memiliki source code. Kemudian ketika terdapat masalah pada salah satu method  maka akan menjadi sulit karena class final tersebut tidak bisa di extend.

Akibatnya method tersebut tidak bisa dioverride untuk memperbaiki masalahnya. Dalam kasus ini kita akan kehilangan ekstensibilitas, sebuah konsep penting yang menguntungkan dari pemrograman berorientasi objek.

Tujuan dari Class Final

Ada tiga tujuan utama kenapa suatu class dibuat final. Tujuan tersebut adalah:

  1. Untuk mencegah inheritance karena class final tidak bisa di extends
  2. Untuk membuat suatu class immutable. Class tidak akan bisa dibuat immutable jika sebelumnya class itu tidak final.
  3. Class yang dibuat final sangat berguna ketika akan digunakan untuk tujuan tingkat keamanan tinggi dalam setiap aplikasi.

Method Final

Suatu method yang dideklarasikan sebagai final maka method tersebut tidak bisa dioverride. Anda akan menemukan banyak sekali method final di library Java.

Jadi kenapa sebuah method harus dideklarasikan sebagai final? Alasannya utamanya adalah untuk menunjukkan dan memastikan tidak ada seorangpun yang dapat mengubah definisi method tersebut.

Terutama ketika berurusan dengan method-method yang bersifat sensitif dalam artian berhubungan langsung dengan fungsi kritikal dan keamanan.

Perlu diingat juga bahwa ketika suatu class dideklarasikan sebagai final, maka class tersebut tidak bisa diwariskan, dan tentu saja secara otomatis semua method yang ada di class tersebut tidak bisa dioverride. Artinya ini sama saja dengan membuat semua method tersebut menjadi final.

Ketika membuat sebuah method final, maka lebih baik memberikan dokumentasi yang baik mengenai kenapa melakukannya. Ini akan membantu Anda dan orang lain untuk menelusuri kode program Java yang Anda buat.

Ketika Anda mencoba mengoverride method final maka akan terjadi error.

Contoh kode di bawah ini akan error karena method melaju() dari class mobil tidak bisa dioverride oleh class Honda.

Tips:

  • Jika beberapa method dari class di panggil oleh method lainnya maka pertimbangkan untuk mendeklarasikan method tersebut sebagai final. Karena jika tidak, mengoveridde method tersebut bisa memberikan hasil yang tidak diharapkan.
  • Ketika suatu constructor memanggil method lainnya maka secara umum method tersebut akan dideklarasikan sebagai final, karena jika tidak juga bisa memberikan hasil di luar dugaan.

Variabel Final Pada Program Java

Mari kita lihat keyword final pada variabel primitif dan variabel instance.

a. Variabel Primitif

Keyword final pada variabel primitif akan membuat nilai variabel itu tidak bisa ditetapkan ulang. Dengan kata lain ketika variabel tersebut diinisialisasi maka nilainya tidak bisa diubah.

Contoh:

Akan terlontar exception:

Satu perbedaan antara variabel biasa dengan variabel final adalah pada variabel biasa nilainya bisa ditetapkan ulang sedangkan pada variabel final nilainya tidak bisa di ubah setelah ditetapkan.

b. Keyword Final Pada Variabel Instance

Ketika Anda memberikan suatu nilai pada variabel instance maka Anda tidak bisa mengubah nilainya. Error akan muncul ketika mencoba untuk mengubah nilai variabel instance dari suatu class dimana variabel itu telah dideklarasikan sebagai final.

Contoh:

Untuk field instance final dapat diinisialisasi dengan tiga cara, yaitu:

  • Ketika deklarasi dilakukan
  • Dilakukan di blok penginisialisasi instance
  • Dilakukan pada constructor

Sesuai dengan konvensi penamaan coding Java, setiap nama constants harus ditulis dengan huruf  kapital dan jika terdiri lebih dari satu suku kata harus dipisahkan dengan tanda “_”.

Contoh:

Variable static final dapat diinisialisasi dengan dua cara, yaitu:

  • Ketika deklarasi langsung, misalnya seperti pada contoh di atas
  • Dilakukan di blok penginisialisasi static

c. Variabel referensi objek

Ketika suatu variabel referensi dinyatakan sebagai final maka Anda tidak dapat menetapkan ulang objek baru pada referensi itu setelah variabel referensi tersebut merujuk ke objek. Tapi, Anda bisa mengubah state objek di mana variabel referensi itu mengarah.

Hal-hal Penting Mengenai Keyword Final Pada Java

Berikut ini adalah beberapa poin penting untuk diingat dari keyword final pada pemrograman Java.

  • Suatu constructor tidak bisa dideklarasikan sebagai final
  • Variabel final lokal harus diinisialisasi ketika dideklarasikan
  • Dalam interface, semua variabel yang dideklarasikan adalah final secara default
  • Nilai dari suatu variabel final tidak dapat diubah
  • Suatu method final tidak bisa dioverride
  • Class final tidak bisa diwariskan
  • Ketika suatu parameter dari method dideklaraikan final maka nilai dari parameter tersebut tidak bisa diubah
  • Gunakan huruf kaptal untuk penamaan constants pada Java
  • Keyword final, finally, dan finalize pada Java adalah berbeda. Dimana finally digunakan pada exception handling sedangkan finalize digunakan pada garbage collection.

Nah, itulah pembahasan mengenai keyword final dalam program Java. Semoga bisa membantu Anda yang baru belajar bahasa pemrograman ini.

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*